You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI Swagger UI响应Schema显示字段别名而非原字段名的解决方法咨询

FastAPI Swagger UI响应Schema显示字段别名而非原字段名的解决方法咨询

我现在遇到了FastAPI搭配Pydantic的一个问题,先把我的代码贴出来:

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"
}
  • Swagger UI响应Schema:不符合预期,它显示的是字段别名而非原字段名,具体展示如下:
{
    "name": "string"
}

预期行为

我希望Swagger UI(即OpenAPI响应Schema)能显示原字段名user_name,而不是别名name。

我已经尝试过的方法

  1. 序列化响应时使用by_alias=False:
async def get_user():
    user_data = {"name": "John Doe"}
    return UserSchema(**user_data).model_dump(by_alias=False)
  1. 在Pydantic模型的Config类中添加populate_by_name = True(代码中已配置):
class UserSchema(BaseModel):
    user_name: Optional[str] = Field(None, alias="name")

    class Config:
        populate_by_name = True
  1. 在路由装饰器中设置response_model_by_alias = False(代码中已配置):
@router.get(
    "/user",
    tags=["user"],
    summary="Get user",
    response_model=UserSchema,
    response_model_by_alias = False
)

想问下大家,该如何配置FastAPI才能让Swagger UI显示原字段名user_name而非别名name呢?

备注:内容来源于stack exchange,提问作者aiktun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 14:34:35