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

FastAPI:如何为基于类的请求参数/过滤器字段添加描述?

为Pydantic模型字段添加SwaggerUI描述的实现方案

完全可以实现为Pydantic模型内的单个字段添加SwaggerUI描述,核心是利用Pydantic的Field类定义字段元数据,再通过FastAPI的Depends正确注入模型作为查询参数,具体步骤如下:

1. 用Pydantic Field定义字段描述

在你的MyFilter模型中,给需要添加描述的字段使用Field类,传入description参数即可。示例代码:

from pydantic import BaseModel, Field
from fastapi import FastAPI, Depends

app = FastAPI()

class MyFilter(BaseModel):
    include_documents: bool = Field(
        default=False,
        description="控制返回结果是否包含关联的文档数据"
    )
    page_index: int = Field(
        default=1,
        description="分页查询的页码,从1开始"
    )
    keyword: str | None = Field(
        default=None,
        description="用于模糊匹配内容的关键词"
    )

2. 正确通过Depends注入模型

不需要用Query或Path包裹整个模型,直接在接口参数中使用Depends()注入MyFilter即可。如果是GET接口,FastAPI会自动将模型字段解析为URL查询参数,同时SwaggerUI会同步显示每个字段的描述:

@app.get("/api/list/")
async def get_result_list(my_filter: MyFilter = Depends()):
    # 这里处理过滤逻辑
    return {"filter_params": my_filter.dict(), "data": []}

3. 解决"只能作为请求体"的报错

你之前遇到的报错,是因为如果在POST接口中直接注入Pydantic模型,FastAPI默认会将其解析为请求体。如果需要在POST接口中把模型作为查询参数使用,可以通过Annotated结合Depends显式声明:

from typing import Annotated

@app.post("/api/list/")
async def post_result_list(my_filter: Annotated[MyFilter, Depends()]):
    return {"filter_params": my_filter.dict(), "data": []}

此时SwaggerUI仍会正确显示每个字段的描述,且参数会被解析为查询参数而非请求体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:18:27