如何在Django的view层自动填充表单中无需用户填写的用户字段
问题原因
你在视图中仅获取了当前登录用户对象,但没有将其绑定到要保存的Company实例上,所以数据库对应的用户字段没有被赋值。
修复步骤
你只需要修改views.py中表单验证通过后的逻辑即可,使用commit=False参数先创建实例但不写入数据库,手动赋值用户字段后再执行保存操作:
def create_comp(request): form = CompanyForm() if request.method == 'POST': print(request.POST) form = CompanyForm(request.POST) if form.is_valid(): # 先不提交到数据库,生成未保存的实例 company_instance = form.save(commit=False) # 给实例的用户字段赋值,注意这里的字段名要和你Company模型里关联User的字段名保持一致 # 如果你模型里的字段叫creator/owner就改成对应名称 company_instance.user = request.user # 正式写入数据库 company_instance.save() return HttpResponseRedirect('http://127.0.0.1:8000/companies_list/')
注意事项
- 请提前确认你的
Company模型中已正确定义了和Django用户表关联的外键字段,示例定义参考:
from django.contrib.auth.models import User from django.db import models class Company(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) # 其他你已定义的字段...
- 你原代码中
user = request.user之后的User = user属于无效冗余代码,可以直接删除。
内容的提问来源于stack exchange,提问作者Mati
相关产品推荐
相关产品推荐

