擅长:python、mysql、java
<p>您可以使用的另一种方法(IMHO更干净)是使用多个模型,如Gino的回答所示,但是您可以简单地在path操作函数中转换数据,而不是覆盖<code>__init__</code>函数,如下所示:</p>
<pre class="lang-py prettyprint-override"><code>from pydantic import BaseModel
from typing import Dict, List, Optional, Union
# I like to specify submodels too with Pydantic to use the dot notation
# but Dict type indicated by Gino works perfectly too
class TeacherParent(BaseModel):
id: str
age: Union[str, int]
class TeacherInput(BaseModel):
name: str
parent: TeacherParent
class TeacherOutput(BaseModel):
name: Optional[str] = None
parent_id: Optional[str] = None
@router.get('/teachers', response_model=List[TeacherOutput])
async def get_all():
"""Here you still specify the response model for documentation purposes,
but transformation happens within the function"""
teachers = app.model.Teacher.all()
output = [
TeacherOutput(name=t.name, parent_id=t.parent.id)
for t in teachers
]
# use parent_id=t.parent['id'] if you didn't specify the parent submodel
return output
</code></pre>