`validator` 方法是否需要检查是否需要必需的参数?
Do `validator` methods need to check required arguments are required?
从 docs 看来,这段代码在 values
中 password1
的第二个 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
,包含此内容是为了证明验证器可以修改值并引发错误。
从 docs 看来,这段代码在 values
中 password1
的第二个 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
,包含此内容是为了证明验证器可以修改值并引发错误。