如何不使用别名创建Pydantic对象并为对应字段赋值
解决方案
如果你使用的是Pydantic V2(当前主流版本)
在模型的配置项中开启populate_by_name=True即可,开启后同时支持原字段名、别名两种传参方式。
示例代码如下:
from pydantic import BaseModel, Field class Params(BaseModel): var_name: int = Field(alias='var_alias') # 新增配置项 model_config = { "populate_by_name": True } # 两种方式都可以正常运行 Params(var_alias=5) Params(var_name=5)
你也可以用ConfigDict的写法实现相同效果:
from pydantic import BaseModel, Field, ConfigDict class Params(BaseModel): model_config = ConfigDict(populate_by_name=True) var_name: int = Field(alias='var_alias')
如果你使用的是Pydantic V1
对应的配置参数为allow_population_by_field_name = True,用法如下:
from pydantic import BaseModel, Field class Params(BaseModel): var_name: int = Field(alias='var_alias') class Config: allow_population_by_field_name = True # 两种传参方式都生效 Params(var_alias=5) Params(var_name=5)
补充说明
- 开启上述配置后,默认导出模型数据时返回的键还是原字段名,如果需要导出别名对应的键,调用
model_dump(by_alias=True)(V2)或者dict(by_alias=True)(V1)即可。 - 如果仅需要临时用原字段名传参不想修改全局配置,也可以调用模型的
model_construct方法初始化,不过更推荐全局加配置的方式,适配性更强。
内容的提问来源于stack exchange,提问作者Erysol
相关产品推荐
相关产品推荐

