在文档中是示例:
Book.objects.annotate(num_authors=Count('authors')).filter(num_authors__gt=1)
在对作者执行注释之前,如何过滤作者? 例如,我想只计算那些名字为“John”的作者。
答案 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',)
)