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版本中,您的代码将无法工作