2013-05-13 54 views
1

查询集我有inital查询集和我遍历这个过滤器在使用循环

stats = {} 
queryset = Item.objects.all() 
for sub in Subject.objects.all(): 
     stats[str(sub.id)] = queryset.filter(subjects=sub.id).count() 

我怎么能这样不打DB如此频繁?

回答

5

查找django aggregation

from django.db.models import Count 

stats = Subject.objects.annotate(count=Count('item')) 

现在每个统计对象将有count领域:

stats[0].count 
+0

该解决方案是你的情况比较好,使用'值()'当你需要一个不同的分组。 – 2013-05-13 09:49:35

3
Subject.objects.values('pk').annotate(total=Count('item'))