`validator` 方法是否需要检查是否需要必需的参数?

Do `validator` methods need to check required arguments are required?

docs 看来,这段代码在 valuespassword1 的第二个 validator 装饰方法中包含额外的检查。

我的观察是否正确 - 因为 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' 在值中和 ... 在这个例子中。

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

May I see an example of what this means? Does this mean that I need to always check for the existence of values if they play some role in my validation even if they are required?

是的,如果您使用前面的字段,您始终需要考虑它可能在 values 中丢失。这是因为将始终调用验证器,即使较早的字段有错误(包括缺少的必填字段)。

Also -- it is unclear why there is a v.title() returned instead of v in the method? What is the purpose of what is returned?

值已更改,因此 samuel 将变为 Samuel,包含此内容是为了证明验证器可以修改值并引发错误。