我可以为 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
的请求和回复使用不同的序列化程序。要求。如何做到这一点?
最佳答案
您可以覆盖序列化程序的 to_representation()
方法:
class CommandSerializerPost(serializers.ModelSerializer):
# yur code here
def to_representation(self, instance):
serializer = CommandSerializerGet(instance)
return serializer.data
UPD
在上面的代码中,
CommandSerializerPost
将 总是 返回 CommandSerializerGet
的输出,不考虑 request.method
.所以如果你只需要改变对GET
的响应应该是这样的要求: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)
关于django - 使用不同的序列化程序进行请求和回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51207089/