django - 两种形式一个视图 - 值不是来自表单 - 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)
帮助将不胜感激。
解决方案
如果您使用{% crispy %}
标签渲染多个表单,您应该按照此处的说明进行操作,因为您不希望脆皮模板标签添加<form>
标签,因为您只需要一个<form>
标签。
相反,在您的每个表单上,在您自己的HTML 标记中设置self.helper.form_tag = False
和添加这两个标记。{% crispy %}
<form>
推荐阅读
- excel - 在循环中过滤多个变量值
- rust - nom parser借用检查器问题
- google-bigquery - 无法通过 ODBC 从东北亚的 BigQuery 表中获取数据
- excel - 我有 For without Next Error,不知道为什么
- expression - QlikView 在表格中添加计算维度
- java - Dockerfile Maven 插件:找不到插件
- elasticsearch - 计算过滤和排序查询的结果
- r - 从数据可视化基础重新创建绘图
- azure - 部署中指定但未部署的 Azure IoT 中心模块
- angular - 我们可以在 ionic 4 stable 中使用 angular 6 吗?