gpt4 book ai didi

json - Django RestFramework 分组依据

转载 作者:数据小太阳 更新时间:2023-10-29 01:41:49 25 4
gpt4 key购买 nike

我的问题与 django-rest-framework 有关,是关于如何对元素进行分组的。

这是我的serializers.py

from collaborativeAPP.models import *
from rest_framework import serializers

class VocabSerializer(serializers.ModelSerializer):
term_word = serializers.CharField(source='term.word',read_only=True)
kwdGroup = serializers.StringRelatedField()
class Meta:
model = Vocab
fields = ('id','term_word', 'meaning','kwdGroup')

class TermSerializer(serializers.ModelSerializer):
word = serializers.CharField(read_only=True)
class Meta:
model = Term
fields = ('url', 'word')

下面的 JSON 是实际结果:

{"results":[
{
"id": 5,
"term_word": "word1",
"meaning": "Text1"
"kwdGroup": "A"
},
{
"id": 6,
"term_word": "word2",
"meaning": "Text2"
"kwdGroup": "A"
},
{
"id": 7,
"term_word": "word3",
"meaning": "Text3"
"kwdGroup": "A"
}
]}

如您所见,kwdGroup 是我要分组的重复元素。

我想按kwdGroup分组:

{"A":[
{
"id": 5,
"term_word": "word1",
"meaning": "Text1"
},
{
"id": 6,
"term_word": "word2",
"meaning": "Text2"
},
{
"id": 7,
"term_word": "word3",
"meaning": "Text3"
}
]
}

我正在 http://www.django-rest-framework.org/ 上寻找答案在 API 指南上,但我很难找到一种方法来引导它。你有同样的问题吗?你对我该怎么做有什么建议吗?您有使用 django-rest-framework 处理元素分组的示例吗?

提前致谢。

最佳答案

假设 kwdGroup 字段是与名为 KeyWordGroup 的模型的关系字段。

默认的 ListSerializer 使用 to_representation 方法来呈现序列化对象的列表 rest_framework :

class ListSerializer(BaseSerializer):
...

def to_representation(self, data):
"""
List of object instances -> List of dicts of primitive datatypes.
"""
# Dealing with nested relationships, data can be a Manager,
# so, first get a queryset from the Manager if needed
iterable = data.all() if isinstance(data, models.Manager) else data

return [
self.child.to_representation(item) for item in iterable
]

我们可以修改 ListSerializer 来对结果进行分组,例如:

class VocabListSerializer(serializers.ListSerializer):

def to_representation(self, data):
iterable = data.all() if isinstance(data, models.Manager) else data
return {
kwdGroup: super().to_representation(Vocab.objects.filter(kwdGroup=kwdGroup))
for kwdGroup in KeyWordGroup.objects.all()
}

然后我们可以将修改后的 VocabListSerializerVocabSerializer 一起使用。

class VocabSerializer(serializers.Serializer):
...
class Meta:
list_serializer_class = VocabListSerializer

关于json - Django RestFramework 分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31071702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com