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

如何将嵌套的Pydantic模型序列化为单个值?

实现Pydantic嵌套Id模型序列化为单一值

方法一:在Id模型中添加自定义序列化逻辑

直接给Id类添加@model_serializer装饰器,定义序列化时返回value字段的值:

from pydantic import BaseModel, model_serializer
from typing import Optional

class Id(BaseModel):
    value: Optional[str]

    @model_serializer
    def serialize_id(self):
        return self.value

class Item(BaseModel):
    id: Id
    name: str

测试验证:

item = Item(id=Id(value="my id here"), name="my name")
print(item.model_dump())
# 输出: {'id': 'my id here', 'name': 'my name'}
print(item.model_dump_json())
# 输出: {"id":"my id here","name":"my name"}

方法二:在Item模型的id字段上指定序列化器

如果不想修改Id类的定义,可以使用Annotated结合PlainSerializer,在Item的id字段上单独配置序列化规则:

from pydantic import BaseModel, PlainSerializer
from typing import Optional, Annotated

class Id(BaseModel):
    value: Optional[str]

class Item(BaseModel):
    id: Annotated[Id, PlainSerializer(lambda x: x.value)]
    name: str

运行上述测试代码,同样会得到预期的序列化结果。

注意事项

  • 当Id的value为None时,序列化结果中id的值也会是None,符合Optional[str]的类型定义。
  • 两种方法都保留了原有的模型结构,不会影响模型的校验和日常使用逻辑。

内容的提问来源于stack exchange,提问作者Avihai Shalom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:06:38