我的模型如下:每个Bottle
都有一个属性name
,以及与Brand
的关系。
在我的一个观点中,我想向用户展示所有不同的瓶子及其数量。
不同的瓶子是具有相同name
属性和相同Brand
关系的瓶子。
应显示2行而不是3行,数量合适(Eitan为1,Almon为2)。
views.py
中的以下一行:
object = Bottle.objects.filter(brand__business__owner_id=user.id).all().values('name').annotate(Count('brand'))
打印object
时生成此内容:
<QuerySet [{'name': 'Almon', 'brand__count': 2}, {'name': 'Eitan', 'brand__count': 1}]>
哪个似乎是正确的方向,但它有两个问题:
我丢失了除vintage
和capacity
以外的所有其他字段(name
,brand__count
)。我当然可以明确地将它们添加到值中,但这似乎是a)upythonic b)它也将这些项目分组!
我的哈巴狗模板抱怨:需要2个值来解包for for循环;得到1(这是因为我将它们作为列表进行迭代,并使用其索引进行编号)
感谢任何帮助!
答案 0 :(得分:1)
object = Bottle.objects.filter(brand__business__owner_id=user.id).all().values('name','vintage','capacity').annotate(Count('brand'))
除非您在提及名称时提及要过滤的字段,否则查询集将如何将其传递给您?然后这样做,就像没有提到值
中的任何名字一样object = Bottle.objects.filter(brand__business__owner_id=user.id).all().values().annotate(Count('brand'))
这两个将为您提供Bottle表中的所有字段