2010-10-10 64 views
3

Django文档根据QuerySet的相关字段(即使用annotate()中的联接)提供了using annotate() to produce aggregate results的示例。过滤django注释()中的相关字段

来自文档的简单示例是例如Store.objects.annotate(min_price=Min('books__price')),其中books是Store to Book的ManyToMany字段,price是Book的字段。

要继续这个例子,我将如何生成一个带有最低价格的商店对象的注释查询集合,而不是商店中的所有书籍,而只是用于“author ='William Shakespeare'”的书籍?换句话说,我如何过滤用于计算聚合的相关字段?

回答

2

The documentation解释如何做到这一点:

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

由于该链接笔记,滤波器的阶数,在这里标注的问题 - 因为你想只算过滤器的注释匹配的书,必须对过滤器先来。

+1

哦,我明白了。这不仅仅是在没有莎士比亚书籍的情况下过滤商店,而且还会影响注释运行的书籍子集。谢谢! – 2010-10-10 19:19:33