我正在尝试为库存系统构建一个页面,允许用户更新收到的项目数量。
我想显示所有产品的表格,让用户输入收到的数量,我会发布并迭代以更新数据库。
以下是我的观点:
def new_shipment(request):
list_of_active_products = Product.objects.filter(status=1)
ShipmentFormSet = formset_factory(ShipmentForm, extra=0)
formset = ShipmentFormSet(initial=list_of_active_products)
return render_to_response('inventory/new_shipment.html', {'formset': formset})
这是我的表格模型:
class ShipmentForm(forms.Form):
sku = forms.IntegerField()
product_name = forms.CharField(max_length=100)
quantity = forms.IntegerField()
以下是表单模板:
<form method="post" action="">
<table>
{% for form in formset %}
{{ form }}
{% endfor %}
</table>
<input type="submit" />
</form>
这是我得到的错误:
渲染时捕获AttributeError:'Product'对象没有属性'get'
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:13)
您还可以使用queryset参数。这应该有效:
formset = ShipmentFormSet(queryset = list_of_active_products)
比照https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#changing-the-queryset
答案 1 :(得分:12)
从文档看起来你必须传入一个字典列表作为初始数据,而不是一个QuerySet:
Also note that we are passing in a list of dictionaries as the initial data.
您可能希望将初始查询更改为:
list_of_active_products = Product.objects.filter(status=1).values()
将返回字典列表而不是模型实例对象。
将初始数据与formset一起使用: https://docs.djangoproject.com/en/dev/topics/forms/formsets/#using-initial-data-with-a-formset
ValuesQuerySet: https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.values