过滤django的annotate()功能中的相关字段

时间:2010-10-10 18:36:56

标签: django

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'”的图书?换句话说,如何过滤用于计算聚合的相关字段?

1 个答案:

答案 0 :(得分:2)

The documentation解释了如何执行此操作:

Store.objects.filter(books__author='William Shakespeare').annotate(
                     min_price=Min('books__price'))

正如该链接所指出的那样,过滤器和注释的顺序在这里很重要 - 因为您只想计算与注释中的过滤器匹配的书籍,过滤器必须首先出现。