Должны ли методы `validator` проверять обязательные аргументы?

Из документов кажется, что этот код содержит дополнительную проверку во втором 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' в значениях и... в этом примере.

Могу ли я увидеть пример того, что это значит? Означает ли это, что мне нужно всегда проверять наличие значений, если они играют определенную роль в моей проверке, даже если они необходимы?

1 ответ

Решение

Могу ли я увидеть пример того, что это значит? Означает ли это, что мне нужно всегда проверять наличие значений, если они играют определенную роль в моей проверке, даже если они необходимы?

Да, если вы используете предыдущее поле, вам всегда нужно учитывать, что оно может отсутствовать в values, Это потому, что валидатор всегда будет вызываться, даже если в более раннем поле была ошибка (включая обязательное поле, которое отсутствует).

Также - неясно, почему в методе возвращается v.title() вместо v? Какова цель того, что возвращается?

Значение изменено так samuel станет Samuelэто включено, чтобы продемонстрировать, что валидаторы могут изменять значения, а также вызывать ошибки.

Другие вопросы по тегам