首页 文章

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

提问于
浏览
1

假设我有以下内容:

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 回答

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

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

相关问题