django:使用多个条件进行过滤而不会丢失其他字段?

时间:2017-05-19 20:17:01

标签: sql django

我的模型如下:每个Bottle都有一个属性name,以及与Brand的关系。

在我的一个观点中,我想向用户展示所有不同的瓶子及其数量。

不同的瓶子是具有相同name属性和相同Brand关系的瓶子。

所以这张表:enter image description here

应显示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}]>

哪个似乎是正确的方向,但它有两个问题:

  1. 我丢失了除vintagecapacity以外的所有其他字段(namebrand__count)。我当然可以明确地将它们添加到值中,但这似乎是a)upythonic b)它也将这些项目分组!

  2. 我的哈巴狗模板抱怨:需要2个值来解包for for循环;得到1(这是因为我将它们作为列表进行迭代,并使用其索引进行编号)

  3. 感谢任何帮助!

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表中的所有字段