1

文档看来,此代码在 in 的第二个validator装饰方法中password1包含一个额外的检查values

我的观察是否正确 - 因为password1不包含默认值,它确实是必需的,所以应该在那里?

from pydantic import BaseModel, ValidationError, validator

class UserModel(BaseModel):
    name: str
    password1: str
    password2: str

    @validator('name')
    def name_must_contain_space(cls, v):
        if ' ' not in v:
            raise ValueError('must contain a space')
        return v.title()

    @validator('password2')
    def passwords_match(cls, v, values, **kwargs):
        if 'password1' in values and v != values['password1']:
            raise ValueError('passwords do not match')
        return v

好的,在我看到的文档中继续阅读:如果另一个字段的验证失败(或该字段丢失),它将不会包含在值中,因此如果值中的 'password1' 和 ... 在此示例中。

我可以看一个例子来说明这意味着什么吗?这是否意味着我需要始终检查值是否存在,如果它们在我的验证中发挥作用,即使它们是必需的?

4

1 回答 1

1

我可以看一个例子来说明这意味着什么吗?这是否意味着我需要始终检查值是否存在,如果它们在我的验证中发挥作用,即使它们是必需的?

是的,如果您使用前面的字段,您总是需要考虑它可能会从values. 这是因为验证器总是会被调用,即使之前的字段有错误(包括缺少的必填字段)。

另外 - 不清楚为什么在方法中返回一个 v.title() 而不是 v ?退货的目的是什么?

该值已更改,因此samuel将变为Samuel,包括在内以证明验证器可以修改值以及引发错误。

于 2019-08-10T09:48:08.887 回答