Django 做一个简单的 group by/count 语句
Posted
技术标签:
【中文标题】Django 做一个简单的 group by/count 语句【英文标题】:Django do a simple group by / count statement 【发布时间】:2014-08-04 18:25:18 【问题描述】:假设我有以下内容:
我的选择 = ( (1,“选择1”), (2,“选择 2”), (3,“选择 3”), ) 类 MyModel(models.Model): 名称 = models.CharField(max_length=64, ) 类别 = models.CharField(max_length=4, 选择=MY_CHOICES)现在,我想做的是按类别分组并获取每个组的实例数。例如,我想得到这样的结果:
选择 1:31 个实例 选择 2:4 个实例 选择 3:2 个实例这可以通过以下查询来完成:
group_by_category = MyModel.objects.values('category').distinct().annotate(count=Count('category'))上面的方法是可行的,因为values()
将返回一个 ValueQuerySet(其中包含 dicts 而不是 MyModel 实例)。所以我无法使用“get_category_display”来输出“Choice 1”、“Choice 2”等,但我只能打印数字。
有没有一种 DRY 方法可以使用 get_category_display
方法?
我知道我可以使用 for 循环自己添加显示值来修改每个 dict(如果 category=='1' 那么它的显示值是“Choice 1”等)但是我觉得这还不够干。
【问题讨论】:
最好为您的类别提供第二个模型,而不是使用选项。 @RodrigoOlmo 我知道这一点,但是我现在不想更改我的数据库架构。 【参考方案1】:>>> dict(MY_CHOICES)[1]
"Choice 1"
为什么是distinct()
?在这种情况下它有什么作用吗?
【讨论】:
以上是关于Django 做一个简单的 group by/count 语句的主要内容,如果未能解决你的问题,请参考以下文章
在 Django 模型上执行 INNER JOIN、GROUP BY 和 COUNT
请教Django的User/Group/Permission管理