解析平面数据到嵌套的pydantic模型



我有两个模型:

from pydantic import BaseModel

class Nested(BaseModel):
id: int
title: str

class Model(BaseModel):
id: int
nested_id: int
nested: Nested

Model参考Nested.

我用JOIN对我的数据库进行查询,并得到类似这样的响应:

data = {'id': 5, 'nested_id': 1, 'id_1': 1, 'title': 'хлеб'}

我想解析这个响应并将正确的字段分配给Nested模型,

是否有任何方法在BaseModel,与我可以解析数据?

我当然可以用我已有的字典。但是我想用BaseModel的方法来做。

我用parse_as_obj(List[Model], data).

像这样?

from pydantic import BaseModel, root_validator

DataDict = dict[str, object]

class Nested(BaseModel):
id: int
title: str

class Model(BaseModel):
id: int
nested_id: int
nested: Nested
@root_validator(pre=True)
def parse_flat_nested_data(cls, values: DataDict) -> DataDict:
if "nested" not in values:
values["nested"] = {
"id": values.get("id_1"),
"title": values.get("title"),
}
return values

if __name__ == "__main__":
data = {"id": 5, "nested_id": 1, "id_1": 1, "title": "хлеб"}
instance = Model.parse_obj(data)
print(instance)

输出:id=5 nested_id=1 nested=Nested(id=1, title='хлеб')

更多信息请参阅验证器文档。

最新更新