Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:过滤查询集,然后计数_Python_Django_Django Queryset_Django Orm - Fatal编程技术网

Python Django:过滤查询集,然后计数

Python Django:过滤查询集,然后计数,python,django,django-queryset,django-orm,Python,Django,Django Queryset,Django Orm,我试图限制在一个页面上执行的查询数量。queryset返回在过去24小时内创建的对象。然后,我想过滤该查询集,以根据字段对对象进行计数 例如: cars = self.get_queryset() volvos_count = cars.filter(brand="Volvo").count() mercs_count = cars.filter(brand="Merc").count() 随着品牌数量的增加(在本例中),查询数量与必须查询的品牌数量呈线性增长 如何对汽车进行单个查询,以返回品

我试图限制在一个页面上执行的查询数量。queryset返回在过去24小时内创建的对象。然后,我想过滤该查询集,以根据字段对对象进行计数

例如:

cars = self.get_queryset()
volvos_count = cars.filter(brand="Volvo").count()
mercs_count = cars.filter(brand="Merc").count()
随着品牌数量的增加(在本例中),查询数量与必须查询的品牌数量呈线性增长

如何对汽车进行单个查询,以返回品牌的所有唯一值以及查询集中的实例数

结果:

{'volvos': 4, 'mercs': 50, ...}
谢谢

编辑:

到目前为止,这些评论都很接近,但并不十分中肯。使用
值列表('brand',flat=True)
将返回品牌。从那里你可以使用

 from collections import Counter 
返回总数。如果有一种方法可以从一个查询中实现这一点,那就太好了,但这可能是不可能的

SELECT brand, COUNT(*) as total 
FROM cars 
GROUP BY brand 
ORDER BY total DESC
等价物:


cars.objects.all().values('brand').annotate(total=Count('brand')).order\u by('total')
要为每个不同的品牌生成计数,请将
annotate
结合使用

totals = cars.values('brand').annotate(Count('brand'))
这将为您提供一个查询集,其中每个元素都是一个包含
brand
brand\u count
的字典。您可以将其直接转换为所需格式的dict:

{item['brand']: item['brand__count'] for item in totals}

这很接近,似乎有一种方法可以做到这一点,就是查询set.values\u list('brand',flat=True),然后对结果使用计数器。这将返回我正在寻找的值和计数。使用计数器确实可以工作-但一旦开始获得大量结果,速度会非常慢。这种工作更适合数据库。