FastAPI如何返回Pydantic模型原字段名而非alias别名
解决方案
1. 单路由独立配置(最灵活,推荐)
直接在路由装饰器中添加response_model_by_alias=False参数即可,不需要修改返回值写法,完全保留类型标注和OpenAPI文档生成能力。
示例代码:
from fastapi import FastAPI from pydantic import BaseModel, Field app = FastAPI() class FooModel(BaseModel): foo: str = Field(..., alias="bar") # 仅当前接口生效,返回原始字段名 @app.get("/", response_model=FooModel, response_model_by_alias=False) def root() -> FooModel: return FooModel(**{"bar": "baz"})
调用接口后返回结果为{"foo": "baz"},完全符合预期。
2. 全局统一配置
如果项目所有接口都需要默认返回Pydantic模型的原始字段名,可以在实例化FastAPI时全局配置该参数,不需要逐个路由添加:
app = FastAPI(response_model_by_alias=False)
如果有个别接口需要返回alias别名,单独给对应路由加response_model_by_alias=True覆盖全局配置即可。
补充说明
之前直接调用.dict(by_alias=False)返回字典的写法,会导致FastAPI跳过Pydantic响应校验、无法生成正确的接口文档,也破坏了类型标注的一致性,不推荐使用。上面两种方案都是FastAPI官方提供的标准实现,完全符合开发规范。
内容的提问来源于stack exchange,提问作者The Fool
相关产品推荐
相关产品推荐

