【发布时间】:2021-09-06 00:20:21
【问题描述】:
我在 Pydantic 中有一个嵌套模型。我在外部模型中有一个root_validator 函数。我的印象是,如果调用外部根验证器,则内部模型是有效的。但显然不是。在下面的 MWE 中,我给内部模型提供了错误的字段名称,但外部验证器失败了:
from typing import List
from pydantic import BaseModel
from pydantic.class_validators import root_validator
class CarList(BaseModel):
cars: List[str]
colors: List[str]
class CarDealership(BaseModel):
name: str
cars: CarList
@root_validator()
def check_length(cls, v):
cars_list = v.get("cars")
if len(cars_list.cars) != len(cars_list.colors):
raise ValueError("wrong length")
return v
car_deal = {
"cars": {
"cars1": ["toyota", "tesla"],
"colors": ["white", "red"]
}
}
CarDealership.parse_obj(car_deal)
我得到的错误是:
File "test.py", line 17, in check_length
if len(cars_list.cars) != len(cars_list.colors):
AttributeError: 'NoneType' object has no attribute 'cars'
我期待的是这样的:
pydantic.error_wrappers.ValidationError: 1 validation error for CarList
cars
field required (type=value_error.missing)
如何确保首先验证内部模型?
【问题讨论】: