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

如何在Pydantic的model_dump序列化中控制递归深度?

如何在Pydantic的model_dump序列化中控制递归深度?

我懂你要的效果——就是Data实例调用model_dump时,info字段保留原来的Info对象,而不是被默认的递归逻辑拆成字典对吧?这确实是用Pydantic时经常会碰到的需求,我给你几个实用的解决办法:

方法一:使用字段序列化器精准控制

在Data类里给info字段专门定义一个序列化器,让它直接返回实例本身,跳过默认的递归序列化流程。代码示例如下:

from pydantic import BaseModel, field_serializer

class Info(BaseModel):
    data: str

class Data(BaseModel):
    info: Info

    @field_serializer('info')
    def serialize_info(self, value: Info) -> Info:
        return value

当你运行Data(info=Info(data="some data")).model_dump()时,返回结果就会是{"info": Info(data="some data")},完全符合你的预期。

方法二:重写model_dump方法完全自定义输出

如果你想要更直接的控制,也可以直接重写Data类的model_dump方法,手动组装你需要的返回结构:

from pydantic import BaseModel

class Info(BaseModel):
    data: str

class Data(BaseModel):
    info: Info

    def model_dump(self, **kwargs):
        # 你可以根据需求决定是否处理传入的kwargs参数,比如忽略或部分应用
        return {"info": self.info}

这种方式自由度极高,你可以完全按照自己的需求构造返回内容,适合需要高度定制序列化结果的场景。

额外提示

如果你使用的是Pydantic v1版本,对应的序列化方法是dict()而不是v2的model_dump(),序列化器的写法会有细微差别,但核心思路是一致的——要么指定字段的专属序列化逻辑,要么重写序列化方法来控制输出。

备注:内容来源于stack exchange,提问作者Fábio Costa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 10:23:00