Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
Django REST框架“;GroupBy“;模型序列化程序_Django_Python 2.7_Django Models_Django Rest Framework_Serialization - Fatal编程技术网

Django REST框架“;GroupBy“;模型序列化程序

Django REST框架“;GroupBy“;模型序列化程序,django,python-2.7,django-models,django-rest-framework,serialization,Django,Python 2.7,Django Models,Django Rest Framework,Serialization,我有以下情况 class MyModel(models.Model): key = models.CharField(max_length=255) value = models.TextField(max_length=255) category = models.CharField(max_length=4) mode = models.CharField(max_length=4) 键、类别和模式字段一起是唯一的。我有以下目标: m1 = MyMo

我有以下情况

class MyModel(models.Model):
    key = models.CharField(max_length=255)
    value = models.TextField(max_length=255)
    category = models.CharField(max_length=4)
    mode = models.CharField(max_length=4)
类别
模式
字段一起是唯一的。我有以下目标:

    m1 = MyModel(key='MODEL_KEY', value='1', category='CAT_1' mode='MODE_1')
    m2 = MyModel(key='MODEL_KEY', value='2', category='CAT_1' mode='MODE_2')
    m3 = MyModel(key='MODEL_KEY', value='1', category='CAT_2' mode='MODE_1')
    m4 = MyModel(key='MODEL_KEY', value='2', category='CAT_2' mode='MODE_2')
我想公开一个API,它将按
类别
进行分组,因此序列化数据将如下所示:

{
    "key": "MODEL_KEY",
    "category": "CAT_1"
    "MODE_1": { "id": 1, "value": "1" }
    "MODE_2": { "id": 2, "value": "2" }
},
{
    "key": "MODEL_KEY",
    "category": "CAT_2"
    "MODE_1": { "id": 3, "value": "1" }
    "MODE_2": { "id": 4, "value": "2" }
}

在django rest framework中,是否有任何方法可以使用
ModelSerializer

对django模型进行分组,并在结果中使用QuerySet:

使用上述方法形成查询集:

# Postgres specific!
from django.contrib.postgres.aggregates.general import ArrayAgg

qs = MyModel.objects.group_by('key', 'category').annotate(
        mode_list=ArrayAgg('mode')).order_by(
        'key', 'category').distinct()
然后,您可以访问结果查询集项上的属性
类别
模式列表
,这些属性作为属性,如
qs[0]。模式列表
。因此,在序列化程序中,您可以简单地将它们命名为字段

model\u list
字段可能需要一个带有一些自定义代码的
SerializerMethodField
来转换列表

请注意,如果您不想按
模式
分组,也需要一个聚合