【发布时间】:2019-08-10 02:06:09
【问题描述】:
从docs看来,这段代码似乎在password1的第二个validator-decorated方法中包含了一个额外的检查,在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”和...在这个示例。
我可以看一个例子来说明这意味着什么吗?这是否意味着我需要始终检查值是否存在,如果它们在我的验证中发挥作用,即使它们是必需的?
【问题讨论】:
-
另外 - 不清楚为什么在方法中返回
v.title()而不是 v ?退货的目的是什么?我猜只有在类级别直接访问该方法时才使用返回值 /shrug