我正在尝试在 CreateView 中保存时设置两个 OneToOne 字段的值。
这是两个模型(每个模型都位于不同的应用程序中)。
CompanyProfile 应用 Models.py:
class CompanyProfile(models.Model):
user = models.OneToOneField(User, related_name='user')
company_name = models.CharField(max_length=255)
CompanyData 应用 Models.py:
class CompanyData(models.Model):
user = models.OneToOneField(User)
companyprofile = models.OneToOneField(CompanyProfile)
num_cust = models.FloatField()
我想使用 CreateView 设置用户和公司配置文件。我可以使用下面的 form_valid 代码设置用户。
公司数据创建 View :
class CompanyDataCreateView(generic.CreateView):
model = models.CompanyData
fields = ['num_cust']
template_name = 'company_data/companydata_form.html'
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return super(CompanyDataCreateView, self).form_valid(form)
问题:如何同时将 CompanyProfile 设置为该用户的公司资料?有没有办法在保存之前在 form_valid 中执行此操作?
最佳答案
我假设您已经为用户创建了CompanyProfile
。
因此,如果 CompanyProfile
存在于单独的应用程序中,请将其导入。
从 yourproject.companyprofileapp.models 导入 CompanyProfile
然后对 CompanyProfile 对象运行查询,以查找与发出请求的用户相匹配的对象。
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.companyprofile = CompanyProfile.objects.get(user=self.request.user)
self.object.save()
return super(CompanyDataCreateView, self).form_valid(form)
这对你有用吗?
关于django - 创建 View 并将值分配给两个 OneToOneFields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42474261/