我有以下模型:
from pydantic import BaseModel
class A(BaseModel):
tag: str
field1: str
class B(BaseModel):
tag: str
field1: str
field2: str
我用它们来定义请求体,像这样:
@app.post('/route')
def handle(request: typing.Union[A, B])
文档说明:
首先包含最具体的类型,然后是不太具体的类型
但是我想知道是否有一种方法可以指导FastAPI根据标记选择正确的模型。目前,我所有的模型都有一个常量标签(即类型A
总是有tag = 'A'
)。是否有一种方法可以改变我的模型定义,以确保分配的模型始终与请求体中收到的标记匹配?
目前,我通过不输入我的handle
函数来解决这个问题,而不是专门将tag
与模型匹配,但理想情况下,我只是使用typing.Union
作为类型,并确信它是正确的。
From @rv。kvetch的注释,将tag
字段注释为字符串字面值,例如Literal['A']
意味着每次都选择正确的类型。
class A(BaseModel):
tag: Literal['A']
field1: str
class B(BaseModel):
tag: Literal['B']
field1: str
field2: str