django - 创建 View 并将值分配给两个 OneToOneFields

标签 django

我正在尝试在 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/

相关文章:

javascript - 如何根据 Django 下拉菜单中的选择显示和隐藏表单字段

django - 从 Django 的 ArrayAgg 中排除空值

Django:在 ManyToManyField 中获取属于模型对象的第一个项目

python - 处理自引用外键;模范妈妈

python - Django:电子商务的产品变体

python - 无法登录用户在 Django 中使用 selenium 进行测试?

Django缓存一个大列表

django - 我收到此错误 rest_framework.request.WrappedAttributeError

python - 如何查询名称包含python列表中任何单词的模型?

python - 如何在 Django 模型选择中使用 unicode 字符?