我有两个模型:
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='хлеб')
更多信息请参阅验证器文档。