使用 FastAPI + Pydantic + OpenAPI 文档保留层次结构

问题描述 投票:0回答:1

我正在 FastAPI 中完成一个 API,并使用 OpenAPI 文档和 pydantic 来生成文档。我注意到的一件事是,当一个字段是一组模型时,不会保留嵌套模型的层次结构。 下面的例子是我的模型的大致结构。

Class MyModel(BaseModel):
   description: str
   success: bool
...

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

但是,在 FastAPI 的文档中,匹配字段仅显示为数组 并将子条目列为“Item”

matches Collapse all array<object>

    Items Collapse all object
    
        description Expand all(string | null)
        success Expand all(object | null)
        

我在这里缺少什么?当嵌套字段是另一个 pydantic 模型的符号对象时,该结构会在其他嵌套场景中保留。为什么生成的是 array 而不是 array.

我尝试过使用 TypeVar、list 并更改子模型的注释。未能保留结构/类名称。

问题似乎在于:

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

field
中的第一个参数应该是默认值或
,这表明它是必需参数。

您可以将这些行修改为:

matches: List[MyModel] = Field(
        …,
        description="An array of matches found",
    )

fastapi openapi pydantic
1个回答
0
投票

问题似乎在于:

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

field
中的第一个参数应该是默认值或
,这表明它是必需参数。

您可以将这些行修改为:

matches: List[MyModel] = Field(
        …,
        description="An array of matches found",
    )
© www.soinside.com 2019 - 2024. All rights reserved.