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

如何用extend_schema_field为自定义字段配置请求响应差异化OpenAPI Schema

实现方案

drf_spectacular 的 @extend_schema_field 原生支持分别定义请求、响应两端的Schema结构,你不需要额外创建空序列化器,直接按如下方式配置即可:

首先导入依赖:

from drf_spectacular.types import OpenApiTypes
from drf_spectacular.utils import extend_schema_field, OpenApiObject

然后修改字段的装饰器配置:

@extend_schema_field(
    {
        "request": OpenApiTypes.BINARY,
        "response": OpenApiObject(
            properties={
                "image": OpenApiObject(
                    properties={
                        "url": OpenApiTypes.STR,
                        "name": OpenApiTypes.STR,
                    },
                    required=["url", "name"]
                ),
                "thumbnail": OpenApiObject(
                    properties={
                        "url": OpenApiTypes.STR,
                        "name": OpenApiTypes.STR,
                    },
                    required=["url", "name"],
                    nullable=True
                )
            },
            required=["image"]
        )
    }
)
class PictureSerializerField(ImageField):
    # 保留你原有字段的业务逻辑
    ...

如果你不想使用OpenApiObject语法,也可以直接写符合JSON Schema规范的字典,效果完全一致:

@extend_schema_field(
    {
        "request": OpenApiTypes.BINARY,
        "response": {
            "type": "object",
            "properties": {
                "image": {
                    "type": "object",
                    "properties": {
                        "url": {"type": "string"},
                        "name": {"type": "string"}
                    },
                    "required": ["url", "name"]
                },
                "thumbnail": {
                    "type": "object",
                    "properties": {
                        "url": {"type": "string"},
                        "name": {"type": "string"}
                    },
                    "required": ["url", "name"],
                    "nullable": True
                }
            },
            "required": ["image"]
        }
    }
)

配置完成后,Swagger文档会自动适配:请求参数显示为文件选择框,响应Schema渲染为你需要的嵌套字典结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:15:03