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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:26:11