django - 使用不同的序列化程序进行请求和回复

标签 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

现在我想对 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/

相关文章:

python - Rest_framework导入问题

python - 如何使用 Python 的 pdb 获取有关对象的更详细信息(字段和方法列表)?

django - 在 IPython 中运行 Django shell

python - Django 。如何保存使用 Pillow 编辑的内容文件

django - 我如何过滤日期时间字段 django jsonfield ?

python - 由于 CORS 问题,Angular 应用程序无法读取 Django Rest Framework API

python - 尝试在 Django 中创建缩略图时获取无法识别图像文件

javascript - Django 渲染一个 "in exception"的页面而不是一个可以帮助调试的页面

python - 在 Django DRF 中注册多个路由 - 使用和调用 ModelViewSets 或 Generics 中的方法

python - 如何在 django rest 框架中获取外键字段名称而不是 id