fastapi - 数组中的 FastAPI 和 Pydantic AnyOf
问题描述
有没有办法像这样使用 FastAPI 在 Pydantic 中声明 AnyOf?
class RedPill(BaseModel):
kind: str = Literal['red']
name: str
size: int
class BluePill(BaseModel):
kind: str = Literal['blue']
serialnumber: str
class Matrix(BaseModel):
year: int
pills: List[Union[RedPill, BluePill]] = []
@api.post('/')
def sample(data: Matrix):
return
如何表示不同对象的有效数组。
解决方案
所以你真的很接近:)你只需要将 Literal 更改为类型,它应该可以工作你可以在这里阅读有关文字的信息
from pprint import pprint
from typing import List, Union
from pydantic.main import BaseModel
from pydantic.typing import Literal
class RedPill(BaseModel):
kind: Literal['red']
name: str
size: int
class BluePill(BaseModel):
kind: Literal['blue']
serialnumber: str
class Matrix(BaseModel):
year: int
pills: List[Union[RedPill, BluePill]] = []
if __name__ == "__main__":
pprint(Matrix.parse_obj({"year": 2021, "pills": [ {"kind": "blue", "serialnumber": "123"}, {"kind": "red", "name": "foo", "size": 100} ] }).dict())
## {'pills': [{'kind': 'blue', 'serialnumber': '123'},
{'kind': 'red', 'name': 'foo', 'size': 100}],
'year': 2021}
推荐阅读
- r - 使用 R 替换列中的数据
- iframe - Docusign API csharp 嵌入式签名体验
- sql - 用其他列的数据替换列
- mongodb - 对于每个文档,使用数组中的 $max 字段检索对象
- asp.net - 参数“表达式”不能转换为类型“DBNull”
- python - 将列表分解为元素
- python-3.x - Pandas:如果最后六个字符包含低于阈值的任何整数,则删除单元格
- javascript - JavaScript:backgroundImage 不随 onMouseOver 改变
- c - 在 64 位的 linux 内核 4.15 中获取 sys 调用表
- c++ - 架构和 ABI 兼容性