【问题标题】:Why doesn't Pydantic validate field assignments?为什么 Pydantic 不验证字段分配?
【发布时间】:2021-04-09 17:29:20
【问题描述】:

我想使用 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 在分配字段时也运行验证器?

【问题讨论】:

    标签: python validation pydantic


    【解决方案1】:

    这是默认行为。要启用字段分配验证,请将model config 中的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
    

    【讨论】:

      猜你喜欢
      • 2021-03-20
      • 2023-02-09
      • 2022-01-13
      • 2020-10-24
      • 2021-10-05
      • 1970-01-01
      • 2023-02-15
      • 2012-08-11
      • 1970-01-01
      相关资源
      最近更新 更多