Django文档根据QuerySet的相关字段(即使用annotate()中的连接)提供using annotate() to produce aggregate results的示例。
文档中的简化示例是Store.objects.annotate(min_price=Min('books__price'))
,其中books是Store to Book的ManyToMany字段,price是Book的字段。
要继续此示例,我如何生成带有最低价格的商店对象的带注释的QuerySet,而不是商店中所有图书的价格,但仅适用于带有“author ='William Shakespeare'”的图书?换句话说,如何过滤用于计算聚合的相关字段?
答案 0 :(得分:2)
The documentation解释了如何执行此操作:
Store.objects.filter(books__author='William Shakespeare').annotate(
min_price=Min('books__price'))
正如该链接所指出的那样,过滤器和注释的顺序在这里很重要 - 因为您只想计算与注释中的过滤器匹配的书籍,过滤器必须首先出现。