2010-08-25 83 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')) 

这创建了很长的查询,但至少只有一个。