使用不同的序列化程序进行请求和回复 [英] Use different serializer for request and reply
问题描述
我可以对 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屋!