从docs看来,此代码在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'和...例子。
我可以看一下这意味着什么的例子吗?这是否意味着即使值是必需的,如果它们在我的验证中起某些作用,我也需要始终检查它们是否存在?
答案 0 :(得分:1)
我可以看一下这意味着什么的例子吗?这是否意味着即使值是必需的,如果它们在我的验证中发挥了作用,我也需要始终检查它们是否存在?
是的,如果您使用的是前面的字段,则始终需要考虑到values
中可能缺少该字段。这是因为,即使较早的字段出现错误(包括缺少的必填字段),也会始终调用验证程序。
还-不清楚为什么在方法中返回v.title()而不是v?返回的目的是什么?
更改了值,使samuel
变为Samuel
,这是为了表明验证者可以修改值以及引发错误。