我有一个formset,我正在尝试将其保存回来。但是,当我尝试检查formset.is_valid()并保存时,即使formset中没有任何内容被更改,验证也总是失败。我正在使用formset显示已存在的数据并尝试编辑它。我不知道我哪里出错了。有人可以帮忙吗? :(
views.py
def product(request, product_id):
product = get_object_or_404(Product, pk=product_id)
productform = ProductForm(instance=product)
itemformset = modelformset_factory(Item, form = ItemForm, extra=0)
items = itemformset(queryset = Item.objects.filter(Product=product_id), prefix='items', )
if request.method == 'POST':
productform = ProductForm(request.POST, instance=product)
items = itemformset(request.POST, queryset = Item.objects.filter(Product=product_id), prefix='items', )
if productform.is_valid():
productform.save()
if items.is_valid():
items.save()
else:
print("fail")
context = {
'productform':productform,
'product_id': product_id,
'items':items,
}
return render(request, 'product.html', context )
.html
{% bootstrap_form productform %}
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#Items"> Items List </a>
</h4>
</div>
<div id="Items" class="panel-collapse collapse">
<table class="table table-bordered">
<thead>
<tr>
<th>Name</th>
<th>Tag</th>
</tr>
<thead>
<tbody>
{{ items.management_form }}
{% for form in items %}
<tr>
{{ form.id}}
<td> {{ form.Name }} </td>
<td> {{ form.Tag }} </td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
答案 0 :(得分:1)
您正在单独呈现表单字段,但不显示错误。首先,允许Django呈现表单并使视图正常工作。完成后,您可以根据需要自定义模板。
<tbody>
{{ items.management_form }}
{% for form in items %}
{{ form }}
{% endfor %}
</tbody>
有关详细信息,请参阅有关使用formsets in templates rendering form fields manually的文档。
这样做可以让您看到模板中的错误。另一种选择是打印或记录productform.errors
和items.errors
。您当前的print("fail")
告诉您存在问题,但不是问题所在。