【问题标题】:Pydantic does not validate when assigning a number to a string将数字分配给字符串时,Pydantic 不验证
【发布时间】:2021-03-20 15:40:34
【问题描述】:

将不正确的属性分配给 Pydantic 模型字段时,不会发生验证错误。

from pydantic import BaseModel

class pyUser(BaseModel):
    username: str

    class Config:
        validate_all = True
        validate_assignment = True

person = pyUser(username=1234)
person.username
>>>1234
try_again = pyUser()

pydantic.error_wrappers.ValidationError:
[ErrorWrapper(exc=MissingError(), loc=('username',))]
<class '__main__.pyUser'>

如何让 pydantic 验证分配?

【问题讨论】:

    标签: python validation pydantic


    【解决方案1】:

    这是根据documentation 的预期行为:

    str

    字符串按原样接受,intfloatDecimal 被强制使用 str(v)

    您可以使用StrictStrStrictIntStrictFloatStrictBool 类型来防止来自兼容类型的强制。

    from pydantic import BaseModel, StrictStr
    
    
    class pyUser(BaseModel):
        username: StrictStr
    
        class Config:
            validate_all = True
            validate_assignment = True
    
    
    person = pyUser(username=1234)  # ValidationError `str type expected`
    print(person.username)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2020-04-22
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多