Код: Выделить всё
from fastapi import FastAPI
from fastapi.routing import APIRouter
from pydantic import BaseModel, Field
from typing import Optional
app = FastAPI()
router = APIRouter()
class UserSchema(BaseModel):
user_name: Optional[str] = Field(None, alias="name")
class Config:
populate_by_name = True
@router.get(
"/user",
tags=["user"],
summary="Get user",
response_model=UserSchema,
response_model_by_alias = False
)
async def get_user():
user_data = {"name": "John Doe"}
return UserSchema(**user_data).model_dump()
Ответ API: (верно)
Код: Выделить всё
{
"user_name": "John Doe"
}
Код: Выделить всё
{
"name": "string"
}
Я хочу, чтобы схема ответа Swagger UI (OpenAPI) отображала имя поля user_name вместо имени псевдонима< /code>.
Что я пробовал
- Использование by_alias=False при сериализации ответа .
Код: Выделить всё
async def get_user(): user_data = {"name": "John Doe"} return UserSchema(**user_data).model_dump(by_alias=False)
- Добавление populate_by_name = True в конфигурации модели Pydantic.
< /ол>Код: Выделить всё
class UserSchema(BaseModel): user_name: Optional[str] = Field(None, alias="name") class Config: populate_by_name = True
- Установка response_model_by_alias = False в маршруте
Код: Выделить всё
@router.get(
"/user",
tags=["user"],
summary="Get user",
response_model=UserSchema,
response_model_by_alias = False
)
Подробнее здесь: https://stackoverflow.com/questions/793 ... nse-schema