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

如何使用Pydantic实现嵌套对象建模?

解决Pydantic嵌套模型验证报错问题

你当前的代码报错是因为定义的B类没有继承Pydantic的BaseModel,Pydantic无法自动识别这类普通类的字段验证规则,因此抛出no validator found的错误。

正确的嵌套模型实现方式

修改B类让它继承BaseModel,即可实现嵌套模型的验证与解析:

from pydantic import BaseModel


class B(BaseModel):
    a: int


class A(BaseModel):
    b: dict[str, B]


d = {
    "b": {
        "us": {"a": 1},
        "uk": {"a": 2}
    }
}
m = A.parse_obj(d)

print(m.dict())

这样修改后,Pydantic能识别B的字段规则,会自动把d["b"]里的每个字典实例化为B对象,同时完成类型验证。运行后会正常输出结构化后的字典:

{'b': {'us': {'a': 1}, 'uk': {'a': 2}}}

特殊场景的替代方案(不推荐用于数据验证)

如果你的场景中确实需要使用非BaseModel的自定义类,可以在父模型的Config中开启arbitrary_types_allowed,但这种方式不会对自定义类的字段做验证:

from pydantic import BaseModel


class B:
    a: int


class A(BaseModel):
    b: dict[str, B]
    
    class Config:
        arbitrary_types_allowed = True


d = {
    "b": {
        "us": {"a": 1},
        "uk": {"a": 2}
    }
}
m = A.parse_obj(d)
# 注意:此时m.b中的值是普通B类实例,Pydantic不会验证a的类型
print(m.dict())

内容的提问来源于stack exchange,提问作者Amin Ba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:22:06