You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

因Apigee不支持format: uuid,如何用drf-spectacular移除AlbumSerializer的该配置?

移除drf-spectacular生成的OpenAPI Schema中uuid字段的format属性

因为Google Apigee不支持format: uuid类型,你可以用以下两种方式移除AlbumSerializer里uuid字段的这个属性:

方法一:自定义无format的UUID字段

直接替换Serializer里的默认UUIDField,自定义字段的schema只返回string类型:

from rest_framework.fields import UUIDField
from drf_spectacular.utils import extend_schema_field

class NoFormatUUIDField(UUIDField):
    @extend_schema_field({'type': 'string'})
    def to_representation(self, value):
        return super().to_representation(value)

之后在你的AlbumSerializer里,把原来的UUIDField()换成NoFormatUUIDField()即可。

方法二:全局修改schema(通过postprocessing hook)

如果想一次性处理所有uuid字段,不用逐个改Serializer,可以配置drf-spectacular的后置钩子:

  1. 在项目的settings.py里添加配置:
SPECTACULAR_SETTINGS = {
    # 其他配置...
    'POSTPROCESSING_HOOKS': ['your_project_name.utils.remove_uuid_format'],
}
  1. 在项目的utils.py里实现钩子函数:
def remove_uuid_format(schema, request, public):
    def traverse_schema(obj):
        if isinstance(obj, dict):
            # 找到类型为string且format为uuid的字段,删除format属性
            if obj.get('type') == 'string' and obj.get('format') == 'uuid':
                obj.pop('format', None)
            # 递归处理嵌套结构
            for value in obj.values():
                traverse_schema(value)
        elif isinstance(obj, list):
            for item in obj:
                traverse_schema(item)
    
    traverse_schema(schema)
    return schema

两种方法选哪个看需求:方法一精准控制单个字段,方法二全局批量处理。

内容的提问来源于stack exchange,提问作者Ajax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:48:24