如何将Pydantic BaseModel解包为kwargs且保留嵌套模型实例
解决方案
你可以通过Pydantic自带的导出参数控制序列化深度,无需自行实现转换逻辑,是当前最简洁的实现方案。
版本适配说明
Pydantic 1.x 版本
使用.dict()方法的max_depth参数,设置为1即可只展开当前BaseModel的第一层字段,所有嵌套的BaseModel实例都会保留原类型,不会被递归转换为字典:
def run_routing_from_job(job): return run_routing( job.inputs.input_file, # 仅展开config的第一层字段,嵌套模型保留实例 **job.inputs.config.dict(max_depth=1) )
你还可以搭配其他常用参数灵活调整导出结果:
- 增加
exclude_none=True:排除值为None的字段,避免传无效参数 - 增加
exclude_defaults=True:排除值为默认值的字段,减少冗余参数 - 增加
by_alias=True:使用字段定义的alias别名作为字典的键,适配参数名不匹配的场景
Pydantic 2.x 版本
Pydantic 2.x废弃了旧的.dict()方法,替换为model_dump()方法,max_depth参数的使用逻辑完全一致:
def run_routing_from_job(job): return run_routing( job.inputs.input_file, **job.inputs.config.model_dump(max_depth=1) )
自定义场景扩展
如果你需要对特定字段做单独的序列化规则(比如部分嵌套模型要展开、部分要保留实例),可以给对应字段添加serializer自定义序列化逻辑,无需修改全局导出配置。
内容的提问来源于stack exchange,提问作者Tom McLean
相关产品推荐
相关产品推荐

