Модель пользовательского ответа Fastapi

#python #json #fastapi #pydantic

Вопрос:

У меня есть маршрутизатор, который извлекает все данные из базы данных. Вот мой код:

 @router.get('/articles/', response_model=List[articles_schema.Articles])
async def main_endpoint():
    query = articles_model.articles.select().where(articles_model.articles.c.status == 2)
    return await db.database.fetch_all(query)
 

Ответ — массив, содержащий объект json, подобный этому

 [
    {
        "title": "example1",
        "content": "example_content1"
    },
    {
        "title": "example2",
        "content": "example_content2"
    },
]
 

Но я хочу дать такой ответ:

 {
    "items": [
        {
            "title": "example1",
            "content": "example_content1"
        },
        {
            "title": "example2",
            "content": "example_content2"
        },
    ]
}
 

Как я могу этого достичь? Пожалуйста, помогите. Заранее спасибо

Ответ №1:

Вы можете просто определить другую модель, содержащую items список в качестве поля:

 from pydantic import BaseModel
from typing import List

class ResponseModel(BaseModel):
    items: List[articles_schema.Articles]
 

и используйте его в ответе:

 @router.get('/articles/', response_model=ResponseModel)
async def main_endpoint():
    query = articles_model.articles.select().where(
        articles_model.articles.c.status == 2
    )
    return ResponseModel(
        items=await db.database.fetch_all(query),
    )