提交表单时Django自动为外键赋值?

Nil*_*Kar 1 python django django-models django-forms django-views

我想在用户提交创建表单时自动将公司名称呈现到数据库中...

这是我的模型:

 class company(models.Model):
    User = models.ForeignKey(User,related_name="Company_Owner",on_delete=models.CASCADE,null=True,blank=True)
    Name = models.CharField(max_length=50,blank=False)

class group1(models.Model):
    User = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=True,blank=True)
    group_Name = models.CharField(max_length=32)
    Company = models.ForeignKey(company,on_delete=models.CASCADE,null=True,blank=True,related_name='Company_group')
Run Code Online (Sandbox Code Playgroud)

这就是我在 views.py 中尝试做的事情:

class group1CreateView(LoginRequiredMixin,CreateView):
    form_class  = group1Form
    template_name = "accounting_double_entry/group1_form.html"

    def form_valid(self, form):
        form.instance.User = self.request.user
        form.instance.Company = company
        return super(group1CreateView, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)

但是得到了这个错误:

ValueError: Cannot assign "<class 'company.models.company'>": "group1.Company" must be a "company" instance.
Run Code Online (Sandbox Code Playgroud)

它对用户有效,但对公司无效。

谁能告诉我我做错了什么???

谢谢...

JPG*_*JPG 5

错误可能在这一行

form.instance.Company = company
Run Code Online (Sandbox Code Playgroud)


这里company看起来像一个Python class,它应该是类的一个实例company


所以,使用一个对象/实例作为

company_obj = company.objects.create(.....) # created a ne object
form.instance.Company = company_obj
Run Code Online (Sandbox Code Playgroud)


或者

company_obj = company.objects.get(id=someid) # fetch new object from db
form.instance.Company = company_obj
Run Code Online (Sandbox Code Playgroud)



除了例外,我们建议您在代码/项目中遵循PEP8 命名约定