使用其他序列化程序进行请求和回复

时间:2018-07-06 09:22:22

标签: django django-rest-framework

我可以对POST / GET请求使用不同的序列化器,如下所示:

class CommandViewSet(DynamicModelViewSet):
    queryset = Command.objects.all()
    serializer_class_post = CommandSerializerPost
    serializer_class_get = CommandSerializerGet
    permission_classes = (AllowAny,)

    def get_serializer_class(self):
        if self.request.method == 'POST':
            return self.serializer_class_post
        elif self.request.method == 'GET':
            return self.serializer_class_get

现在,我想对POST请求的请求回复使用不同的序列化器。如何做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以为此重写序列化程序的to_representation()方法:

class CommandSerializerPost(serializers.ModelSerializer):
    # yur code here

    def to_representation(self, instance):
        serializer = CommandSerializerGet(instance)
        return serializer.data

UPD

在上面的代码中,{<1>}总是 返回CommandSerializerPost的输出,而与 CommandSerializerGet 无关。因此,如果仅需要更改request.method请求的响应,就应该是这样的:

GET

答案 1 :(得分:0)

您可以通过MySerializer1接收数据,并通过MySerializer2响应请求

Class MyView(APIView):
    def post(selft, request):
        serializer1 = MySerializer1(request.data)
        # other codes
        serializer2 = MySerializer2(changedData)
        return response(serializer2.data)