16

我正在尝试为库存系统构建一个页面,该页面将允许用户更新收到的物品数量。

我想显示所有产品的表格并让用户输入收到的数量,我将发布并迭代以更新数据库。

这是我的看法:

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:“产品”对象没有属性“获取”

谁能帮我解决这个问题?

4

2 回答 2

17

从文档看来,您必须传入字典列表作为初始数据,而不是 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()

这将返回字典列表而不是模型实例对象。

使用带有表单集的初始数据: 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

于 2011-07-17T01:44:24.693 回答
13

您还可以使用 queryset 参数。这应该有效:

formset = ShipmentFormSet(queryset=list_of_active_products)

参看。https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#sharing-the-queryset

于 2012-12-22T17:38:52.370 回答