Fastapi orm_mode to pydantic pasring



我无法得到任何关于如何从form (sqlalchemy)解析到pydanctic模型工作的信息,以下是示例:我有一个方案(模型):

`class DocListOut(BaseModel):
success: bool
data: DataBaseOut
class Config:
orm_mode = True`

可以看到,还有另一种模型作为"数据"类型。这是DataBaseOut方案:

`class DataBaseOut(BaseModel):
id: str
name: str
# type: str
tmc_code: str
Organization: OrganizationOut
class Config:
orm_mode = True`

它还将OrganizationOut作为字段之一。

`class OrganizationOut(BaseModel):
id: str
name: str
address: str
class Config:
orm_mode = True`

所以在我的路由中,我必须返回一个字典,这样我的pydantic模型才能正确地解析它,例如:

`@router.get('/document', response_model=schemas.DocListOut)
def get_doc_list(db: Session = Depends(get_db)):
data = db.query(Document).first()
organization = db.query(Organization).first()
return {'success': True, 'data': data}`

但是,由于我缺少组织行,我有一个错误,所以我尝试如下:

`return {'success': True, 'data': data, 'Organization': organizaton}` 

不工作,同样的错误

`return {'success': True, 'data': data, 'Organization': {'Organization': organization}}`

不工作,同样的错误

错误是:

pydantic.error_wrappers.ValidationError: 1 validation error for DocListOut
response -> data -> Organization
field required (type=value_error.missing)

那么,如果我在其他模型中有2-3层模型,那么我传递pydantic模型的方式是什么?什么是奇怪的我找不到任何信息,和ppl通常只是返回一个查询对象到多层pydantic,它以某种方式工作?谢谢你的帮助。

您可以使用Optional类型来表示可能不需要的字段,例如

>>> from typing import Optional
>>> from pydantic import BaseModel
>>>
>>> class M(BaseModel):
...     id: int
...     name: Optional[str]
... 
>>> m = M(id=1)
>>> m
M(id=1, name=None)