两个表单一个视图 - 值不是来自表单 - Django



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

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

我能够在 Sim 模型中更新数据(保存在数据库中),但表单中的值没有进入我的付款模型,这就是为什么它给我一个验证错误"列 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)

帮助将不胜感激。

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

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

最新更新