我试图限制在页面上执行的查询数。查询集返回在过去24小时内创建的对象。然后我想过滤该查询集来根据字段计算对象。Django:筛选查询集然后计数
实施例:
cars = self.get_queryset()
volvos_count = cars.filter(brand="Volvo").count()
mercs_count = cars.filter(brand="Merc").count()
随着越来越多的品牌(在该示例中),查询的数量与必须被查询品牌的数量线性增长。
如何为汽车进行单一查询,以便返回品牌的所有唯一值的字典和查询集中实例的数量?
结果:
{'volvos': 4, 'mercs': 50, ...}
谢谢!
编辑:
的意见,到目前为止,他们已经接近,但不太上的标记。使用values_list('brand',flat = True)将返回品牌。从那里,你可以使用
from collections import Counter
要返回的总数。如果有一种方法可以从单个查询中完成,但这可能是不可能的。
是接近的,好像做到这一点的一种方式就是queryset.values_list(“品牌”,扁= TRUE),然后用计数器结果。这将返回我正在查找的值和计数。 – Emile
使用计数器确实可以工作 - 但是一旦您开始获得大量结果,会非常慢。这种工作更适合于数据库。 – Shadow