如何使用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
相关产品推荐
相关产品推荐

