Django将其余的框架序列化器调整为获得不同的json结构

时间:2014-11-04 20:43:33

标签: python json django django-rest-framework

我有一个使用rest框架的django应用程序,我在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 个答案:

答案 0 :(得分: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)