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

FastAPI+Pydantic中数组嵌套模型OpenAPI文档层级丢失问题排查

问题原因及解决方法

你这问题核心是Field的用法错误:Field的第一个参数是用来设置字段默认值的,不是用来指定类型的。你把List[MyModel]当成默认值传入Field,反而干扰了FastAPI对类型注解的识别,导致它没法把数组元素关联到MyModel,只能泛化成object。

正确写法示例

方式1:类型注解+Field(仅传描述等参数)

from pydantic import BaseModel, Field
from typing import List

class MyModel(BaseModel):
    description: str
    success: bool

class TopLevel(BaseModel):
    message: str
    matches: List[MyModel] = Field(description="An array of matches found")

方式2:用Annotated(Pydantic v2+推荐写法)

from pydantic import BaseModel, Field
from typing import List, Annotated

class MyModel(BaseModel):
    description: str
    success: bool

class TopLevel(BaseModel):
    message: str
    matches: Annotated[List[MyModel], Field(description="An array of matches found")]

如果用的是Pydantic v2,也可以直接用Python原生的list代替List,效果一致:

matches: list[MyModel] = Field(description="An array of matches found")

改完之后,OpenAPI文档里的matches就会显示为array<MyModel>,子项也会保留MyModel的类名和完整结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:29:58