我有两种形式,它们的模型彼此相关,我正在尝试将它们同时保存在数据库中。
我的一个表单(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 %}
标记。