我有一个formset,我试图挽回它。但是,当我尝试检查formset.is_valid()并保存时,即使没有更改formset中的任何内容,验证也总是失败。我正在使用formset显示已经存在的数据并尝试对其进行编辑。我不知道我哪里错了。有人可以帮忙吗? :(Django 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>
你还没有显示ItemForm,但我想你可能忘记排除'product'字段。由于您想编辑与单个产品相关的所有项目,因此您可能会发现['inlineformset_factory'](https://docs.djangoproject.com/en/1.9/topics/forms/modelforms/#inline-formsets)有用。 – Alasdair