繁体   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