我在 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)
The error I get is:
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)
如何确保内部模型首先通过验证?
root_validator
。最好的方式是,你的示例代码实际上与问题中的示例类匹配,这样更清楚地展示你的回答如何处理root_validator
。 - undefined