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

使用Pydantic模型遇ValidationError错误,请求协助修复

Pydantic ValidationError 修复方案

问题原因

你的Data模型定义中,data字段是dict[str, Products]类型,这意味着data字典里的每个值都必须符合Products模型的结构——即必须包含一个名为products的键,对应的值是Item对象的列表。

但你传入的验证数据中,data的products键直接对应了一个Item列表,没有包裹成Products模型要求的结构,导致Pydantic无法将其解析为Products实例,从而抛出ValidationError。

修复方案

方案1:调整输入数据结构(推荐,符合原模型定义)

将data字典中的值调整为符合Products模型的结构,也就是每个值是包含products字段的字典:

from pydantic import BaseModel

class Item(BaseModel): 
    id: int
    brand: str

class Products(BaseModel):
    products: list[Item]

class Data(BaseModel):
    data: dict[str, Products]

# 修复后的数据:data的value是符合Products结构的字典
d = Data.model_validate({'data': {'smartphones': {'products': [{'id': 1234, 'brand': 'infinix'}]}}})
print(d)
# 输出:data={'smartphones': Products(products=[Item(id=1234, brand='infinix')])}

如果确实需要data的键为products,可以这样传入:

d = Data.model_validate({'data': {'products': {'products': [{'id': 1234, 'brand': 'infinix'}]}}})

方案2:修改模型定义(适配实际数据结构)

如果你的实际业务需求是Data的data字段直接对应Products的products列表,可以修改Data模型的定义:

from pydantic import BaseModel

class Item(BaseModel): 
    id: int
    brand: str

class Products(BaseModel):
    products: list[Item]

# 修改Data模型,data字段直接为Products类型
class Data(BaseModel):
    data: Products

d = Data.model_validate({'data': {'products': [{'id': 1234, 'brand': 'infinix'}]}})
print(d)
# 输出:data=Products(products=[Item(id=1234, brand='infinix')])

或者如果不需要Products中间层,直接简化模型:

from pydantic import BaseModel

class Item(BaseModel): 
    id: int
    brand: str

class Data(BaseModel):
    data: list[Item]

d = Data.model_validate({'data': [{'id': 1234, 'brand': 'infinix'}]})
print(d)
# 输出:data=[Item(id=1234, brand='infinix')]

内容的提问来源于stack exchange,提问作者moris m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:10:12