如何在django模型中对这些记录执行注释之前过滤记录?

时间:2011-04-08 15:17:44

标签: python django django-models

在文档中是示例:

Book.objects.annotate(num_authors=Count('authors')).filter(num_authors__gt=1)

在对作者执行注释之前,如何过滤作者? 例如,我想只计算那些名字为“John”的作者。

1 个答案:

答案 0 :(得分:0)

我不相信你可以使用Django数据库抽象API进行这种选择性计数,而不包括一些SQL。您使用extra方法添加了QuerySet的SQL。

假设文档中的示例是名为“inventory”的应用程序的一部分,并使用与postgresql一起使用的语法(您没有指定并且这是我更熟悉的),以下内容应该是您所做的事情要求:

Book.objects.extra(
  select={"john_count":
    """SELECT COUNT(*) from "inventory_book_authors" 
    INNER JOIN "inventory_author" ON ("inventory_book_authors"."author_id"="inventory_author"."id")
    WHERE "inventory_author"."name"=%s
    AND "inventory_book_authors"."book_id"="inventory_book"."id"
    """},
  select_params=('John',)
  )