dan*_*ast 5 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
Run Code Online (Sandbox Code Playgroud)
现在我想用一个不同的序列化的请求和应答一个的POST请求。如何做到这一点?
nev*_*ner 10
您可以to_representation()为此重写序列化器的方法:
class CommandSerializerPost(serializers.ModelSerializer):
# yur code here
def to_representation(self, instance):
serializer = CommandSerializerGet(instance)
return serializer.data
Run Code Online (Sandbox Code Playgroud)
UPD
在上面的代码中,CommandSerializerPost无论. 因此,如果您只需要更改请求的响应,则应该是这样的:CommandSerializerGetrequest.methodGET
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)
Run Code Online (Sandbox Code Playgroud)
您可以通过MySerializer1接收数据并响应MySerializer2的请求
Class MyView(APIView):
def post(selft, request):
serializer1 = MySerializer1(request.data)
# other codes
serializer2 = MySerializer2(changedData)
return response(serializer2.data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2728 次 |
| 最近记录: |