Python Django执行一个简单的GROUPBY/count语句
假设我有以下几点: 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) 我的选择=( (1,“选择1”), (2,“选择2”), (3,“选择3”), ) 类MyModel(models.Model): name=models.CharField(最大长度=64,) 类别=模型.CharField(最大长度=4,选项=我的选项) 现在,我想做的是按类别分组,并获得每个组的实例数。例如,我希望得到如下结果: Choice 1: 31 Instances Choice 2: 4 Instances Choice 3: 2 Intances 选择1:31个实例 选择2:4个实例 选择3:2份 这可以通过以下查询完成: group_by_category = MyModel.objects.values('category').distinct().annotate(count=Count('category')) 按类别分组=MyModel.objects.values('category').distinct().annotate(count=count('category')) 但是,上述方法之所以有效,是因为Python Django执行一个简单的GROUPBY/count语句,python,django,django-models,dry,django-orm,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) 我的选择=( (1,“选择1”), (2,“选择2”),
values()
将返回一个ValueQuerySet(其中包含dict而不是MyModel实例)。因此,我无法使用“get_category_display”输出“选项1”、“选项2”等,但我只能打印数字
是否有一种干燥的方法可以使用get\u category\u display
方法
我知道我可以使用for循环自己添加显示值来修改每个dict(如果category='1',那么它的显示值就是“Choice 1”等等),但是我觉得这还不够干
>>> dict(MY_CHOICES)[1]
"Choice 1"
为什么
distinct()
?在这种情况下它有什么作用吗?最好为您的类别使用第二个模型,而不是使用选项。@Rodrigolmo我知道这一点,但我现在不想更改我的数据库架构。