Django:过滤一个查询集,然后计算

2024-10-02 10:20:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

示例:

cars = self.get_queryset()
volvos_count = cars.filter(brand="Volvo").count()
mercs_count = cars.filter(brand="Merc").count()

随着品牌数量的增加(在本例中),查询数量与必须查询的品牌数量成线性增长。在

如何对汽车进行一个查询,返回品牌的所有唯一值和查询集中实例数的dict?在

结果:

^{pr2}$

谢谢!在

编辑:

在迄今为止的评论中,他们的意见很接近,但并不十分中肯。使用values_list('brand', flat=True)将返回品牌。从那里你可以使用

 from collections import Counter 

返回总数。这是一个很好的方法,但如果不是这样的话。在


Tags: 对象self示例get数量count页面filter
2条回答
SELECT brand, COUNT(*) as total 
FROM cars 
GROUP BY brand 
ORDER BY total DESC

等价物:

cars.objects.all().values('brand').annotate(total=Count('brand')).order_by('total')

要为每个不同的品牌生成一个计数,可以将valuesannotate结合使用。在

totals = cars.values('brand').annotate(Count('brand'))

这为您提供了一个queryset,其每个元素都是一个包含brand和{}的字典。您可以将其直接转换为您想要的格式的dict:

^{pr2}$

相关问题 更多 >

    热门问题