簡體   English   中英

為什么 Pydantic 不驗證字段分配?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM