产品有很多项目。我可以整齐地在表格中显示特定产品的项目。但是当我尝试保存时,在回发时只会保存表中的最后一个元素以用于该产品的所有项目。这可能是因为我只从我的html返回最后一个元素。任何人都可以告诉我任何优雅的方式来做到这一点?这是我的代码。
models.py
class Item(models.Model):
Product = models.ForeignKey("Product", related_name = "Attributes")
Name = models.CharField(max_length=1000, blank=True, null=True)
Type = models.CharField(max_length=1000, blank=True, null=True)
forms.py
class ItemForm(ModelForm):
class Meta:
model = Item
fields = ['Name', 'Tag']
views.py
def getItems(request, product_id):
items = get_list_or_404(Item, Product = product_id)
itemslist = []
if request.method == 'GET':
for item in items:
itemform = ItemForm(instance=item)
itemlist.append(itemform)
else:
for item in items:
itemform = ItemForm(request.POST, instance=item)
itemlist.append(itemform)
for tempform in itemlist:
if tempform.is_valid():
tempform.save()
return render(request, 'knowledgebase.html', {'product_id': product_id, 'itemslist': itemslist})
html文件:
<tbody>
{% for itemform in itemslist%}
<tr>
<td class="td"> {{ itemform.Name }} </td>
<td> {{ itemform.Tag }} </td>
</tr>
{% endfor %}
</tbody>
答案 0 :(得分:1)
唯一的最后一种形式是保存,因为您要向模板发送要呈现的各个表单的列表。如果没有看到你的其他HTML,我说你只有一个提交按钮。由于其他表单没有在提交时提供数据,因此它们不被视为绑定,因此在调用is_valid()时将不会返回True并且不会到达tempform.save() https://docs.djangoproject.com/en/1.9/ref/forms/api/#bound-and-unbound-forms
尝试打印出每个tempform.is_bound()的值来测试它。
缓解这种情况的一种方法是使用formset或为每个模型实例创建自己的自定义表单,其中包含多个字段。