使用不同的序列化程序进行请求和回复 [英] Use different serializer for request and reply

查看:73
本文介绍了使用不同的序列化程序进行请求和回复的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I can use different serializers for POST / GET requests as follows:

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 请求的 request reply 使用不同的序列化程序。

Now I would like to use a different serializer for the request and the reply of a POST request. How can this be accomplished?

推荐答案

您可以覆盖序列化程序的 to_representation()方法:

You can override serializer's to_representation() method for this:

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

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

UPD

在上面的代码中, CommandSerializerPost 始终返回 CommandSerializerGet 的输出,而与 request.method 。因此,如果只需要为 GET 请求更改响应,就应该是这样:

In above code, CommandSerializerPost will always returns the output of CommandSerializerGet, irrespective of the request.method. So it should be like this if you need to change respnse only for GET request:

class CommandSerializerPost(serializers.ModelSerializer):

    def to_representation(self, instance):
        if self.context['request'].method == 'GET':
            serializer = CommandSerializerGet(instance)
            return serializer.data
        return super().to_representation(instance)

这篇关于使用不同的序列化程序进行请求和回复的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆