Skip to main content
 首页 » 编程设计

python之提交表单时,Django 会自动为外键赋值吗

2025年05月04日29lyhabc

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

这是我的模型:

 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') 

这就是我在 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) 

但是出现了这个错误:

ValueError: Cannot assign "<class 'company.models.company'>": "group1.Company" must be a "company" instance. 

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

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

谢谢...

请您参考如下方法:

错误可能在这一行

form.instance.Company = company 


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


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

company_obj = company.objects.create(.....) # created a ne object 
form.instance.Company = company_obj 


或

company_obj = company.objects.get(id=someid) # fetch new object from db 
form.instance.Company = company_obj 



除了异常(exception),我们建议您遵循 PEP8 naming convetions在你的代码/项目中