我想使用Pydantic来验证我的对象中的字段,但似乎只有在创建实例时才进行验证,而不是在稍后修改字段时进行验证。
在上述示例中,当我在创建
但是,当我之后修改该字段时,Pydantic不会发出警告。这是正常的吗?或者,我如何让 Pydantic 在分配字段时也运行验证器?
from pydantic import BaseModel, validator
class MyStuff(BaseModel):
name: str
@validator("name")
def ascii(cls, v):
assert v.isalpha() and v.isascii(), "must be ASCII letters only"
return v
# ms = MyStuff(name = "me@example.com") # fails as expected
ms = MyStuff(name = "me")
ms.name = "me@example.com"
print(ms.name) # prints me@example.com
在上述示例中,当我在创建
MyStuff
时传递无效值时,Pydantic会如预期的那样发出警告。但是,当我之后修改该字段时,Pydantic不会发出警告。这是正常的吗?或者,我如何让 Pydantic 在分配字段时也运行验证器?
validate_assignment = True
有什么缺点吗?我想知道为什么默认值是False
。 - Antonio Romero Oca