下面的代码是根据 Pydantic 文档修改的
,我想知道如何更改BarModel,FooBarModel因此它们接受分配给m1. 我尝试过使用__root__和 语法,但Dict[str, BarModel]一直无法找到神奇的组合。
from pydantic import BaseModel
class BarModel(BaseModel):
whatever: float
foo: str
class FooBarModel(BaseModel):
banana: str
bar: BarModel
m = FooBarModel(banana='a', bar={'whatever': 12.3, 'foo':'hello'})
m1 = FooBarModel({
'a':{'whatever': 12.3, 'foo':'hello'},
'b':{'whatever': 12.4, 'foo':'bye'}
})
print(m.dict()) # returns a dictionary:
print(m1.dict()) # TypeError
Run Code Online (Sandbox Code Playgroud)
最终的解决方案将部署在 FastAPI 上下文中。
以下代码接收一些已 POST 到 FastAPI 服务器的 JSON。FastAPI 使其可以作为 Pydantic 模型在函数中使用。我的示例代码通过写入文件来处理它。我不喜欢的(这似乎是使用 Pydantic List 的副作用)是我必须循环回来才能获得一些可用的 JSON。
我怎样才能在不循环的情况下做到这一点?
我觉得这一定是可能的,因为return images它确实有效。
from typing import List
from fastapi import FastAPI
from pydantic import BaseModel
import json
app = FastAPI()
class Image(BaseModel):
url: str
name: str
@app.post("/images/multiple/")
async def create_multiple_images(images: List[Image]):
#return images # returns json string
#print(images) # prints an Image object
#print(images.json()) # AttributeError: 'list' object has no attribute 'json'
#print(json.dumps(images)) # TypeError: Object of type Image is not JSON serializable
img_data = …Run Code Online (Sandbox Code Playgroud)