【发布时间】: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 我知道这一点,但是我现在不想更改我的数据库架构。
标签: python django django-models dry django-orm