Pydantic如何仅用alias解析入参、返回响应时使用实际字段名?
问题解决方法
核心逻辑
Pydantic默认配置下,字段的alias会同时作用于「解析外部数据(反序列化)」和「输出响应(序列化)」两个阶段,你只需要关闭序列化阶段的别名使用规则即可。
最优方案(全版本通用)
直接在路由装饰器中新增response_model_by_alias=False参数,修改后的路由代码如下:
@router.get(path="category", response_model=TMDB_GetCategoriesResponse, response_model_by_alias=False) async def get_all_categories(): async with httpx.AsyncClient() as client: response = await client.get(Endpoint.GET_CATEGORIES) return TMDB_GetCategoriesResponse.parse_obj(response.json())
该参数显式指定FastAPI返回响应时,使用模型定义的原生字段名而非别名,同时不影响你解析上游接口数据时用别名匹配字段的逻辑。
可选扩展配置
- 如果需要所有接口默认都用原生字段名返回,可以在初始化FastAPI实例时全局配置:
from fastapi import FastAPI app = FastAPI(response_model_by_alias=False) - 如果你需要在非FastAPI场景下单独控制Pydantic模型的序列化行为,调用模型的
dict()(V1版本)或model_dump()(V2版本)方法时指定by_alias=False即可:# Pydantic V1 写法 res = TMDB_GetCategoriesResponse.parse_obj(response.json()) return res.dict(by_alias=False) # Pydantic V2 写法 res = TMDB_GetCategoriesResponse.model_validate(response.json()) return res.model_dump(by_alias=False)
内容的提问来源于stack exchange,提问作者Rechu
相关产品推荐
相关产品推荐

