Django,有效地检索多个字段过滤器的计数

时间:2014-02-19 21:43:37

标签: django

我一直在高低搜索,试图解决这个问题,但是已经空了。

我有以下型号:

class Person(models.Model):
  street_name = models.CharField(max_length=64)

我的目标是使用街道上的人数来获取一组独特的street_name,最好是[('Street 1', 45), ('Street 2', 26), ...]的最终形式

目前我这样做如下:

unique_streets = Person.objects.values_list('street_name', flat=True).distinct()
street_counts = []
for street in unique_streets:
  street_counts.append(Person.objects.filter(street_name=street).count())

people_on_street = zip(unique_streets, street_counts)

这是低效的,因为for循环的每次迭代都会导致额外的数据库命中。是否可以在一两个查询中执行此操作?

1 个答案:

答案 0 :(得分:1)

是的,聚合。

from django.db.models import Count
street_counts = Person.objects.values('street_name').annotate(Count('street_name'))