如何结合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字段的驼峰转换逻辑:
- 在项目中创建钩子文件(比如
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)
- 在
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
相关产品推荐
相关产品推荐

