假设我有以下内容:
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 回答
为什么
distinct()
?在这种情况下它会做什么吗?