我一直在高低搜索,试图解决这个问题,但是已经空了。
我有以下型号:
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循环的每次迭代都会导致额外的数据库命中。是否可以在一两个查询中执行此操作?
答案 0 :(得分:1)
是的,聚合。
from django.db.models import Count
street_counts = Person.objects.values('street_name').annotate(Count('street_name'))