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
来转换列表
请注意,如果您不想按模式
分组,也需要一个聚合