Django通过/ count语句做一个简单的组

时间:2014-06-14 08:33:17

标签: python django django-models dry django-orm

假设我有以下内容:

MY_CHOICES = (
  (1, "Choice 1"),
  (2, "Choice 2"),
  (3, "Choice 3"),
)

class MyModel(models.Model):
  name = models.CharField(max_length=64, )
  category = models.CharField(max_length=4, choices=MY_CHOICES)

现在,我想要做的是按类别分组并获取每个组的实例数。例如,我想得到这样的结果:

Choice 1: 31 Instances
Choice 2: 4 Instances
Choice 3: 2 Intances

可以使用以下查询完成此操作:

group_by_category = MyModel.objects.values('category').distinct().annotate(count=Count('category'))

上述方法可行,因为values()将返回一个ValueQuerySet(包含dicts而不是MyModel实例)。所以我能够使用“get_category_display”来输出“Choice 1”,“Choice 2”等,但我只能打印这些数字。

是否有一种干燥的方法可以使用get_category_display方法?

我知道我可以使用for循环自行添加显示值来修改每个dict(如果category =='1',那么它的显示值是“Choice 1”等)但是我觉得不够干。

1 个答案:

答案 0 :(得分:1)

>>> dict(MY_CHOICES)[1]
"Choice 1"

为什么distinct()?在这种情况下它能做什么吗?