我可以对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
请求的请求和回复使用不同的序列化器。如何做到这一点?
答案 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)