我有一个pydantic模型中的List
,我希望我的自定义验证器在列表改变时运行(不仅仅是在赋值时)。
from typing import List
from pydantic import BaseModel, validator
class A(BaseModel):
b: List[int] = []
class Config:
validate_assignment = True
@validator("b")
def positive(cls, v):
assert all(i > 0 for i in v), f"No negative numbers: {v}"
return v
a = A()
a.b = [1, 2, -3] # error
a.b = [1, 2] # no error
a.b.append(-3) # no error
我希望最后一个append
引发错误。
如果我尝试重新创建对象,则会出现错误(如预期)
A(**a.dict())
即使附加错误的类型也是允许的,为什么这不会破坏模型呢?
a.b.append("asdf") # no error
这类似于/是以下内容的扩展:How to validate a pydantic object after editing it
2条答案
按热度按时间krcsximq1#
cbwuti442#
我建议两种方法来评估列表,一种是使用验证器在列表更改时运行,另一种是使用field选项,如下所示: