Проблема здесь в том, что вы пытаетесь создать модель pydanti c там, где она не нужна. Если вы хотите сериализовать / десериализовать список объектов, просто оберните вашу единственную модель в List[]
из встроенного python модуля typing
. Нет необходимости пытаться создать множественную версию вашего объекта с pydanti c BaseModel
(и, как вы можете видеть, он все равно не работает).
С Тем не менее, самый простой способ сделать то, что вы хотите, это просто указать List[Test]
в любой точке, где вам нужен список Test
с, например,
from typing import List
from fastapi import FastAPI
from pydantic import BaseModel
existing_tests = [
{
"name": "name1",
"family": "family1"
},
{
"name": "name2",
"family": "family2"
}
]
class Test(BaseModel):
name: str
family: str
class Config:
orm_mode = True
app = FastAPI()
@app.get("/tests", response_model=List[Test])
async def fetch_tests():
return existing_tests
@app.post("/tests")
async def submit_tests(new_tests: List[Test]):
print(new_tests)
Но, конечно, если вы найдете себя многократно (или только) указывая Test
как список, вы, конечно, можете просто присвоить его переменной, а затем использовать эту переменную, где это необходимо, например, так:
Tests = List[Test]
@app.get("/tests", response_model=Tests)
async def fetch_tests():
return existing_tests
@app.post("/tests")
async def submit_tests(new_tests: Tests):
print(new_tests)
Я думаю, что первый вариант, вероятно, хотя и немного понятнее в вашем коде, и если вы не указали List[Test]
много раз, использование переменной для этой цели, вероятно, не стоит дополнительного уровня косвенности.