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

如何结合djangorestframework-camel-case与drf-spectacular生成驼峰式Schema

解决drf-spectacular Schema驼峰命名问题

方法一:使用drf-spectacular内置支持(需版本≥0.24.0)

如果你的drf-spectacular版本足够新,官方已经集成了djangorestframework_camel_case的支持,只需在settings.py中添加对应的后置处理钩子:

SPECTACULAR_SETTINGS = {
    # 保留原有其他配置
    'POSTPROCESSING_HOOKS': [
        'drf_spectacular.hooks.postprocess_schema_enums',
        'drf_spectacular.contrib.djangorestframework_camel_case.camelize_serializer_fields',
    ],
}

同时确保你已经正确配置了djangorestframework_camel_case的核心渲染器和解析器:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'djangorestframework_camel_case.render.CamelCaseJSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ),
    'DEFAULT_PARSER_CLASSES': (
        'djangorestframework_camel_case.parser.CamelCaseJSONParser',
    ),
}

方法二:自定义后置处理钩子(兼容旧版本)

如果你的drf-spectacular版本较低,没有内置的camel_case支持,可以自己实现Schema字段的驼峰转换逻辑:

  1. 在项目中创建钩子文件(比如your_project/hooks.py),添加以下代码:
from djangorestframework_camel_case.util import camelize

def camelize_schema_fields(schema, context):
    def traverse_and_camelize(data):
        if isinstance(data, dict):
            return {camelize(key): traverse_and_camelize(value) for key, value in data.items()}
        elif isinstance(data, list):
            return [traverse_and_camelize(item) for item in data]
        return data
    return traverse_and_camelize(schema)
  1. 在settings.py中配置这个自定义钩子:
SPECTACULAR_SETTINGS = {
    # 保留原有其他配置
    'POSTPROCESSING_HOOKS': [
        'drf_spectacular.hooks.postprocess_schema_enums',
        'your_project.hooks.camelize_schema_fields',
    ],
}

验证配置

重启Django服务后,访问Swagger UI页面,查看Schema中的字段名是否已转为驼峰格式。若仍有问题,检查:

  • drf-spectacular与djangorestframework_camel_case的版本兼容性
  • 序列化器中是否存在显式设置source但未对应驼峰规则的字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:33:24