2010-10-10 70 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