【发布时间】:2018-06-05 20:22:09
【问题描述】:
Django 说,我应该这样渲染inline formset:
{{ formset.management_form }}
{% for form in formset %}
{{ form.id }}
{{ form.field_1 }}
{{ form.field_2 }}
<button type="button"> delete </button>
{% endfor %}
<button type="submit"> submit </button>
好的。但是如果我想动态删除一些表单集对象(form)怎么办?用户按下delete 按钮-我从DOM 中删除form,我使用ajax 从数据库中删除与form 相关的对象。到目前为止它工作正常。但是当用户点击submit - 我的views.py 试图验证表单集:
filled_formset = OrderItemFormSet(request.POST, instance=order)
if filled_formset.is_valid():
并引发错误:
MultiValueDictKeyError at /order/cart/
"'orderitem_set-0-id'"
...\market\ordersys\views.py in show_cart
59. if filled_formset.is_valid():
我认为这是因为 form 对象被 django 以某种规律性显示(第一种形式得到 id = orderitem_set-0-id,第二种 = orderitem_set-1-id 等)当我从 DOM 中删除第一个 form 时,规律性被打破 - 没有更多的form 和orderitem_set-0-id。但是is_valid() 仍在尝试获取它dict["orderitem_set-0-id"]。
我可以使用一些黑魔法,替换django的技术信息,显示在DOM中,恢复被破坏的规律,但是有没有更好的方法?
您能告诉我如何正确地动态删除表单集项目吗?
【问题讨论】:
标签: python django django-forms inline-formset