gpt4 book ai didi

django - 有没有办法更改 drf-spectaulous 中序列化器自动生成的架构名称

转载 作者:行者123 更新时间:2023-12-02 01:36:07 24 4
gpt4 key购买 nike

我有许多名为“InputSerializer”和“OutputSerializer”的序列化器,它们在 drf-spectaulous 中转换为“输入”和“输出”模式名称。这最终会将 api 端点引用到相同的模式。有没有办法覆盖这些序列化器自动生成的模式名称而不更改类的名称?

最佳答案

我遇到过很多次,但从未尝试解决它。查看我发现的文档 extended_schema_serializer ,这可能会满足您的需要。这是full api ,以及相关点:

  • component_name – 覆盖默认类名提取
@extended_schema_serializer(component_name="SomeNiceReallyLongId")
class Input(Serializer):
# pass

它有点长而且丑陋,但是可以通过装饰器上的装饰器来修复:D

编辑:

我最终实现了这个。这是我写的小包装。它只是使序列化器和字段之间的事情变得更短和一致。

您可以在序列化器上多次使用 extended_schema_serializer,因此这不会破坏任何内容。

@oapi.name("UserEditRequest")
@extend_schema_serializer(examples=[]) # other settings
class EditSerializer(ModelSerializer):
pass
# oapi.py
from drf_spectacular.utils import set_override as _set_override

def name(val: str):
def decorator(klass):
if issubclass(klass, BaseSerializer):
_set_override(klass, "component_name", val)
elif isinstance(klass, Field):
_set_override(klass, "field_component_name", val)
else:
raise Exception(f"Unhandled class: {klass}")

return klass

return decorator

关于django - 有没有办法更改 drf-spectaulous 中序列化器自动生成的架构名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72366171/

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