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

如何在drf-spectacular中配置展示400校验错误响应详情?

实现方案

你使用drf-spectacular生成接口文档的场景下,完全可以实现自动从序列化器提取校验错误信息填充到400响应说明中,无需手动拼接错误内容。


具体修改步骤

1. 调整接口装饰器配置

首先确认你已经在extend_schema中指定了请求对应的序列化器,工具会自动扫描该序列化器的所有字段校验规则(必填、格式限制、数值范围等),关联生成400响应的错误结构:

from drf_spectacular.utils import extend_schema, OpenApiResponse, OpenApiExample
# 导入drf-spectacular内置的校验错误响应结构,不同版本路径可能略有差异,可根据实际版本调整
from drf_spectacular.serializers import ValidationErrorSerializer
# 导入你自己的业务请求序列化器
from .serializers import TransactionCreateSerializer

@extend_schema(
    summary="创建新交易",
    # 必须指定请求序列化器,才能自动关联字段的校验规则
    request=TransactionCreateSerializer,
    responses={
        201: OpenApiResponse(
            description='创建成功',
        ),
        400: OpenApiResponse(
            # 指定校验错误的响应结构
            response=ValidationErrorSerializer,
            description='请求参数错误,返回字段对应的校验错误详情',
            # 可选:自定义展示具体错误示例,会直接显示在文档的400响应区块
            examples=[
                OpenApiExample(
                    '必填字段缺失示例',
                    value={
                        "organisation_id": [
                            "该字段为必填项。"
                        ]
                    },
                    status_codes=[400]
                ),
                OpenApiExample(
                    '字段值无效示例',
                    value={
                        "amount": [
                            "金额必须大于0。"
                        ]
                    },
                    status_codes=[400]
                )
            ]
        ),
    },
)

2. 全局配置(可选)

如果不想每个接口都重复配置400响应,可以在项目settings.py的SPECTACULAR_SETTINGS中添加全局默认响应配置,所有接口会自动带上400校验错误的说明:

SPECTACULAR_SETTINGS = {
    # 其余原有配置保持不变
    'DEFAULT_RESPONSES': [
        (400, 'drf_spectacular.serializers.ValidationErrorSerializer', '请求参数校验错误'),
    ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:27:02