DRF Spectacular(Swagger)中application/json请求体不显示序列化器字段
问题解决:JSON请求体无法展示序列化器字段
问题原因
你当前通过@extend_schema仅配置了请求示例,但未显式关联序列化器作为请求Schema的来源,导致drf-spectacular优先使用示例而非序列化器字段生成JSON请求体结构;结合camel_case的后处理钩子,也可能进一步影响了字段的自动识别。
解决方案
1. 显式关联请求序列化器
修改LoginView的@extend_schema装饰器,添加request=LoginSerializer参数,让drf-spectacular基于序列化器生成字段结构,同时保留示例:
from drf_spectacular.utils import extend_schema, OpenApiExample @extend_schema( request=LoginSerializer, # 显式指定请求序列化器 examples=[ OpenApiExample( 'Example', value={"username": "email of the user", "password": "password of the user"}, request_only=True, ) ], ) class LoginView(GenericAPIView): # 原有代码不变
2. 优化视图返回格式(可选但推荐)
将视图中返回的JsonResponse替换为DRF的Response类,确保API响应符合DRF规范,也有助于spectacular正确生成响应Schema:
from rest_framework.response import Response # 替换LoginView中的post方法返回部分 return Response({'detail': 'Successfully logged in.'})
3. 验证camel_case配置
若字段仍未正常显示,可临时注释POSTPROCESSING_HOOKS中的驼峰转换钩子,测试是否是转换逻辑导致的问题:
SPECTACULAR_SETTINGS = { # 其他配置不变 # 'POSTPROCESSING_HOOKS': [ # 'drf_spectacular.contrib.djangorestframework_camel_case.camelize_serializer_fields', # ], }
若注释后字段正常显示,说明需要调整驼峰转换配置,确保序列化器字段被正确转换并在Schema中展示。
验证效果
重启服务后,在Swagger UI中选择application/json的content-type,即可看到序列化器中定义的username和password字段(包含长度限制、必填等约束信息),同时保留示例内容。
内容的提问来源于stack exchange,提问作者thelearner
相关产品推荐
相关产品推荐

