Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django执行一个简单的GROUPBY/count语句_Python_Django_Django Models_Dry_Django Orm - Fatal编程技术网

Python Django执行一个简单的GROUPBY/count语句

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”),

假设我有以下几点:

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')) 但是,上述方法之所以有效,是因为
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我知道这一点,但我现在不想更改我的数据库架构。