Django 使用外键提交两个表单

问题描述 投票:0回答:2

我正在尝试在一个模板中提交两份表格。一个模型的键是另一个模型的外键。外键将在 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)但是我显然错过了一些可能非常基本的东西。任何帮助表示赞赏

python django
2个回答
1
投票

您在错误的表单上执行了 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')

0
投票

给出的答案对我不起作用,需要将 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')
© www.soinside.com 2019 - 2024. All rights reserved.