Django调整REST框架序列化器以获取不同的JSON结构
我有一个使用Django框架的应用,这个应用里用到了REST框架。在我的serializers.py文件中,我是这样序列化一个模型的:
class CourseSerializer(serializers.ModelSerializer):
class Meta:
model = Course
depth = 1
我在API上得到的输出是这样的:
[
{
"course_id": 992,
},
{
"course_id": 994,
}
]
但是现在我想稍微调整一下JSON的结构,想要得到这样的输出:
[
{
"course": {
"course_id": 992,
}
},
{
"course": {
"course_id": 994,
}
}
]
这是我的api.py文件:
class CourseSubjectList(APIView):
def get(self, request, pk, format=None):
subs = Course.objects.all()
serialized_subs = CourseSerializer(subs, many=True)
return Response(serialized_subs.data)
我该怎么做才能实现这个呢?
1 个回答
2
你可能需要为你的 CourseSerializer
实现一个包装器。可以试试下面的代码。
class CourseSerializer(serializers.ModelSerializer):
class Meta:
model = Course
depth = 1
class CourseWrapperSerializer(serializers.Serializer):
course = CourseSerializer(read_only=True, source='*')
这里最重要的是 source='*'
,这表示整个对象都应该传递到这个字段里。然后在你的视图中,使用这个包装器,而不是原来的序列化器。
class CourseSubjectList(APIView):
def get(self, request, pk, format=None):
subs = Course.objects.all()
serialized_subs = CourseWrapperSerializer(subs, many=True)
return Response(serialized_subs.data)