Django 试图将查询集作为初始数据传递给表单集
我正在尝试为库存系统构建一个页面,允许用户更新收到的物品数量 我想显示一个所有产品的表,让用户输入收到的数量,我将发布并迭代以更新数据库 以下是我的看法:Django 试图将查询集作为初始数据传递给表单集,django,formsets,Django,Formsets,我正在尝试为库存系统构建一个页面,允许用户更新收到的物品数量 我想显示一个所有产品的表,让用户输入收到的数量,我将发布并迭代以更新数据库 以下是我的看法: def new_shipment(request): list_of_active_products = Product.objects.filter(status=1) ShipmentFormSet = formset_factory(ShipmentForm, extra=0) formset = Shipmen
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>
{formset%中表单的%s}
{{form}}
{%endfor%}
下面是我得到的错误:
呈现时捕获AttributeError:“Product”对象没有属性“get”
有人能帮我解决这个问题吗?从文档中可以看出,您必须传入一个字典列表作为初始数据,而不是查询集:
还要注意,我们正在传入一个字典列表作为初始数据。
您可能希望将初始查询更改为:
list_of_active_products = Product.objects.filter(status=1).values()
它将返回字典列表,而不是模型实例对象
将初始数据与表单集一起使用:
ValuesQuerySet:
您也可以使用queryset参数。这应该起作用: formset=ShipmentFormSet(queryset=active产品列表)
cf.就是这样。我不知道values()函数,所以非常感谢您的提醒。回去工作…非常感谢。不过,您在示例中拼错了函数。它应该是
list\u of\u active\u products=Product.objects.filter(status=1).values()
OP使用formset\u工厂,而queryset只能使用modelformset\u工厂。至少,在某些Django版本中,您的代码将无法工作