首页 > 解决方案 > 两种形式一个视图 - 值不是来自表单 - Django

问题描述

我有两种形式,它们的模型相互关联,我正在尝试将它们同时保存在数据库中。

我的一个表单 (sim_form) 将被更新,而我的另一个表单 (payment_form) 将使用相同的按钮保存。我正在使用 django Crisp-forms,就显示而言,两种形式都在呈现。同样,我也能够根据收到的值(pk=id)获取 sim_form 的数据。

我能够在 Sim 模型中更新数据(保存在数据库中),但来自 Form 的值没有进入我的支付模型,这就是为什么它给我一个验证错误,“列 deposit_date 不能为空。

我尝试了不同的解决方案,您可以从下面的代码中看到。

def updatePayment(request, id):
    sim  = get_object_or_404(Sim, pk=id)
    if request.method == "POST":
        print("i am in if1")
        payment_form = AddPaymentForm(request.POST)
        # payment_form = payment_form.save(commit=False)
        sim_form = UpdatePayment(request.POST, instance=sim)
        try:
            if  sim_form.is_valid:
                print("i am in if")
                # payment_form = payment_form.save(commit=False)
                # sim_form = sim_form.save(commit=False)
                # payment_form.save()
                sim_form.save()
                messages.success(request, ("Payment has been updated"))
                if payment_form.is_valid():
                    print("i am in if paymemt")
                    payment_form.save()
            else:
                messages.warning(request, ("Data in fields is incorrect, please try again"))
        except Exception as e:
            messages.warning(request, ("Error: {}".format(e)))
    else:
        sim_form = UpdatePayment(instance=sim)
        payment_form = AddPaymentForm(request.POST)
    context = {'sim_form': sim_form,'payment_form': payment_form,}
    return render(request, 'payment/updatePayment.html', context)

帮助将不胜感激。

标签: djangodjango-modelsdjango-formsdjango-views

解决方案


如果您使用{% crispy %}标签渲染多个表单,您应该按照此处的说明进行操作,因为您不希望脆皮模板标签添加<form>标签,因为您只需要一个<form>标签。

相反,在您的每个表单上,在您自己的HTML 标记中设置self.helper.form_tag = False和添加这两个标记。{% crispy %}<form>


推荐阅读