我能够使用 django-rest-framework 获得下面的 JSON 结果。
{
"id": 1,
"fieldA": 1,
"fieldB": 100
},
{
"id": 2,
"fieldA": 2,
"fieldB": 101
},
{
"id": 3,
"fieldA": 1,
"fieldB": 101
}
我只想将结构更改为此。
{
"typeA":
{
"id": 1,
"fieldA": 1,
"fieldB": 100
}
},
{
"typeB":
{
"id": 2,
"fieldA": 2,
"fieldB": 100,
},
{
"id": 3,
"fieldA": 1,
"fieldB": 101,
}
}
typeA
包括fieldB == 100
的对象,typeB
包括fieldB == 101
的对象。
我可以在 views.py get_query_set()
使用类似的Objects.filter()
来处理结果。所以你不需要关心它。
我问题的关键是如何插入我的自定义字段名称并将结果移动到其子级别。目前,我想该解决方案将与构建序列化程序的create()
和update()
函数有关。请给出任何提示或提示。
这是我 model.py 了解更多信息。
class Results(models.Model):
fieldA = models.ForeignKey(Model)
fieldB = models.ForeignKey(EplTeams, null=True)
views.py
class ResultsView(generics.ListAPIView):
serializer_class = ResultSerializer
def get_queryset(self):
typeA = Results.objects.filter( fieldB=100 )
typeB = Results.objects.filter( fieldB=101 )
queryset = list( itertools.chain(typeA, typeB) )
return queryset
serializers.py
class ResultSerializer(serializers.ModelSerializer):
class Meta:
model = Results
ListSerializer
在您的 serializers.py 中:
class CustomListSerializer(serializers.ListSerializer):
def to_representation(self, data):
resdata = []
data1 = data.filter(fieldB=100)
data2 = data.filter(fieldB=101)
resdata.append({'typeA': super(CustomListSerializer, self).to_representation(data1)})
resdata.append({'typeB': super(CustomListSerializer, self).to_representation(data2)})
return resdata
class ResultSerializer(serializers.ModelSerializer):
class Meta:
model = Results
list_serializer_class = CustomListSerializer
在此处了解有关 ListSerializer 的更多信息