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

Pydantic 2:实例生成后修改字段别名的方法问询

解决Pydantic实例创建后修改字段别名的问题

直接修改实例的model_fields里的别名不会生效,因为model_fields是类级别的属性,修改它会影响所有该类的实例,且Pydantic在序列化时依赖预编译的别名映射,临时修改无法触发更新。这里提供两种不需要修改原模型类的解决方案:

方案一:动态创建子类修改字段别名

通过动态生成原模型的子类,在子类中修改目标字段的别名,再将现有实例转换为子类实例,这样既保留原类不变,又能实现自定义别名的序列化:

from pydantic import BaseModel

class MyModel(BaseModel):
    name: str
    age: int

obj = MyModel(age=8, name='Brian')

# 基于原模型创建动态子类,修改name字段的alias
ModifiedModel = type(
    'ModifiedModel',
    (MyModel,),
    {'name': MyModel.model_fields['name'].model_copy(update={'alias': 'full_name'})}
)

# 将原实例转换为子类实例
modified_obj = ModifiedModel.model_validate(obj.model_dump())
print(modified_obj.model_dump(by_alias=True))

输出结果:

{'full_name': 'Brian', 'age': 8}

方案二:手动替换序列化结果的键

如果只是需要最终输出的键名变更,最直接的方式是在序列化后手动替换键:

obj = MyModel(age=8, name='Brian')
raw_dump = obj.model_dump()
# 替换键名
raw_dump['full_name'] = raw_dump.pop('name')
print(raw_dump)

输出结果:

{'age': 8, 'full_name': 'Brian'}

内容的提问来源于stack exchange,提问作者Tom Hamilton Stubber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:57:04