python - Django Rest 框架 : Register multiple serializers in ViewSet

标签 python django django-rest-framework

我正在尝试创建一个自定义 API(不使用模型),但它没有在架构中显示请求定义(因此,没有在 swagger 中显示它)。我目前的代码是:

View .py

class InfoViewSet(viewsets.ViewSet):

    @list_route(methods=['POST'])
    def some_method(self, request):
       data = JSONParser().parse(request)
       serializer = GetInfoSerializer(data=data)
       serializer.is_valid(raise_exception=True)
       info = get_data_from_elsewhere(serializer.data)
       return Response(info)

网址.py
router.register(r'^info', InfoViewSet, base_name='info')

序列化程序.py
class InfoSomeMethodSerializer(serializers.Serializer):

  list_id = serializers.ListField(child=serializers.IntegerField())
  password = serializers.CharField()

它看起来很招摇,但只是响应部分。如何注册post参数?我也不确定我是否正确使用了 DRF(我是新手),所以任何更正都将不胜感激。

——

编辑:
我尝试了 Linovia 建议的 serializer_class 参数但没有用,我得到:

TypeError: InfoViewSet() received an invalid keyword 'serializer_class'



我尝试覆盖 get_serializer_class方法并且也不起作用:
def get_serializer_class(self):
    if self.action == 'some_method':
        return InfoSomeMethodSerializer

最佳答案

对于 future 运行此功能的人 - 当您添加 serializer_class 时归因于 @action继承自 viewsets.ViewSet 的 View 的装饰器,它确实会默认给你一个 TyperError,正如 OP 提到的:

TypeError: InfoViewSet() received an invalid keyword 'serializer_class'

要克服这个问题,只需添加 serializer_class = None作为您 View 的类变量。

编辑 OP 代码示例:
class InfoViewSet(viewsets.ViewSet):
    # ↓ ADD THIS!
    serializer_class = None 

    # Now you can add serializer_class without geting a TypeError ↓
    @list_route(methods=['POST'], serializer_class=GetInfoSerializer)
    def some_method(self, request):
       data = JSONParser().parse(request)
       serializer = GetInfoSerializer(data=data)
       serializer.is_valid(raise_exception=True)
       info = get_data_from_elsewhere(serializer.data)
       return Response(info)

关于python - Django Rest 框架 : Register multiple serializers in ViewSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42536737/

相关文章:

python - 手动导入default.py到AppConfig ready()方法

python - 尝试使用 django-subdomains 在我的 django urlpatterns 中查找循环引用?

django - 为什么Python请求库无法得到响应?

django - 如何在 user.save() 之后验证并返回访问和刷新 token

javascript - Plotly-Dash:如何确定客户端回调中的触发器输入

python - Pandas 将列表转换为 float

python - 在列表中拆分列表

python - 从 MYSQL 读取模型时出现 DjangoUnicodeDecodeError

django - Django REST Framework 的嵌套 API View ?

python - Emacs python 模式 : Keyboard shortcuts for pdb step-by-step debugging