Django调整REST框架序列化器以获取不同的JSON结构

0 投票
1 回答
831 浏览
提问于 2025-05-01 15:52

我有一个使用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)

撰写回答