[英]Why doesn't Pydantic validate field assignments?
我想使用 Pydantic 驗證我的 object 中的字段,但似乎驗證只在我創建實例時發生,但在我以后修改字段時不會發生。
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 在分配字段時也運行驗證器?
這是默認行為。 要啟用字段分配驗證,請將model 配置中的validate_assignment
設置為 true:
class MyStuff(BaseModel):
name: str
@validator("name")
def ascii(cls, v):
assert v.isalpha() and v.isascii(), "must be ASCII letters only"
return v
class Config:
validate_assignment = True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.