2010-08-25 121 views
3

如何可以計數在Django有關的對象(在小於Ñ查詢,其中Ñ是物體的數量)。爲了澄清,假設我有表AB。每個B連接到恰好一個A。方法我試過:Django的計數相關的對象

A.objects.select_related().filter(attr=val) 
A[i].B_set.count() 

當然,對於每一個[I]我想找出對象數量的Django執行一個查詢。

所以問題是 - 有沒有一種方法來優化?

回答

10

沒有嘗試過多少查詢被執行,但djano方式應該使用annotate()類似:

q = A.objects.select_related().annotate(num_B=Count('B')) 
print A[0].num_B 
+0

這可能是一個愚蠢的問題,但我得到的錯誤說全球名稱「計數」沒有定義時,這樣做。 – Seaux 2012-09-29 03:35:24

+5

nvm,找到答案:from django.db.models import Count – Seaux 2012-09-29 03:38:01

3

我來回答我的問題:)如果一個對象被查詢是這樣的:

A.objects.select_related().filter(atrr=val).annotate(n_b=models.Count('B')) 

這創建了很長的查詢,但至少只有一個。