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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:00:00