【问题标题】:Django submitting two forms with a foreign keyDjango 使用外键提交两个表单
【发布时间】:2018-10-28 01:50:59
【问题描述】:

我正在尝试在一个模板中提交两个表单。一个模型键是另一个模型的外键。 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 正在保存,因为它打印了一个有效的对象。我正在尝试做类似how to set foreign key during form completion (python/django) 的事情,但是我显然遗漏了一些可能非常基本的东西。任何帮助表示赞赏

【问题讨论】:

    标签: python django


    【解决方案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')
    

    【讨论】:

    • 完美运行。谢谢!
    猜你喜欢
    • 2020-12-30
    • 2015-06-30
    • 2019-11-16
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2011-03-13
    • 2021-03-10
    相关资源
    最近更新 更多