我正在尝试在一个模板中提交两份表格。一个模型的键是另一个模型的外键。外键将在 POST 完成后设置。
class CustomerSystem(models.Model):
---Some fields---
class MN(models.Model):
--some fields--
customer_system_serial_number = models.ForeignKey(CustomerSystem, on_delete= models.CASCADE)
这就是我的 models.py 的样子
模板文件是带有'form'变量的标准模板
在 forms.py 中,我已从 MN 模型中排除了 customer_system_serial_number。
这就是我在视图中尝试的
@login_required
def add_customers(request):
if request.method == 'POST':
form_cs = CustomerSystemForm(request.POST, prefix='cs')
form_mn = MNForm(request.POST, prefix='mn')
if form_cs.is_valid() and form_mn.is_valid():
model_instance = form_cs.save(commit=False)
model_instance.save()
print(model_instance)
form_mn.customer_system_serial_number = model_instance
form_mn.save()
return HttpResponseRedirect('/database/customers')
else:
form_cs = CustomerSystemForm(request.POST, prefix='cs')
form_mn = MNForm(request.POST, prefix='mn')
return render(request, 'database/customer_system.html', {'form_cs': form_cs, 'form_mn': form_mn})
我收到的错误是非完整性错误/非空错误。我可以看到 model_instance 正在保存,因为它打印了一个有效的对象。我正在尝试做类似如何在表单完成期间设置外键(python/django)但是我显然错过了一些可能非常基本的东西。任何帮助表示赞赏
您在错误的表单上执行了 commit=False,并且您将外键设置到 MN 表单上,而不是模型实例上。
model_instance = form_cs.save()
mn_instance = form_mn.save(commit=False)
mn_instance = customer_system_serial_number = model_instance
mn_instance.save()
return HttpResponseRedirect('/database/customers')
给出的答案对我不起作用,需要将 FK 与 .点不等于=符号。
工作代码
model_instance = form_cs.save()
mn_instance = form_mn.save(commit=False)
mn_instance.customer_system_serial_number = model_instance
mn_instance.save()
return HttpResponseRedirect('/database/customers')