gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:50:17 24 4
gpt4 key购买 nike

我正在尝试创建一个自定义 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com