WTForms validators.Optional: продолжить проверку пустых полей?

У меня проблема с WTForms validators.Optional(), потому что он останавливает цепочку проверки, если поле пусто (документы WTForms). Это означает, что проверка не продолжается с пользовательскими функциями, что может привести к ошибкам типа.

Пример кода:

class MyForm(form):
    myfield = TextField('My Field', [validators.Optional()])

    def validate_myfield(form, field):
        field.data = unicode(field.data)

Есть ли способ или обходной путь для продолжения цепочки проверки, даже если необязательное содержимое пусто, возможно, с использованием пользовательские валидаторы?

Если я неправильно подхожу к проблеме, то подсказка в правильном направлении будет полезна!


person lecodesportif    schedule 31.03.2011    source источник
comment
Есть ли причина, по которой вы не можете просто разместить пользовательские валидаторы перед необязательными в списке валидаторов? (валидаторы оцениваются по порядку)   -  person dagoof    schedule 01.04.2011
comment
Ваш комментарий помог, сделайте его ответом, чтобы я мог его выбрать.   -  person lecodesportif    schedule 01.04.2011
comment
Ради интереса, зачем продолжать проверку, если поле пустое? Обычно вы можете реагировать на пустые значения только двумя способами: либо это ошибка (необязательно), либо это не ошибка (необязательно), и вы обрабатываете ее каким-то постоянным образом (поскольку значение всегда одно и то же). Если вы получаете ошибки типа, пытаетесь ли вы сделать что-то в валидаторах, что на самом деле им не принадлежит? Я не знаком с WTForms, но, по-видимому, вы можете создавать настраиваемые поля, которые также могут обрабатывать любые настраиваемые требования к синтаксическому анализу.   -  person Aleksi Torhamo    schedule 01.04.2011
comment
Для пустых значений я использую валидаторы для условного изменения field.data. Условие — это данные из другого поля. Это работает, но, может быть, настраиваемые поля справляются с этим лучше?   -  person lecodesportif    schedule 01.04.2011
comment
Пользовательские поля кажутся лучшим местом для этого. Я предполагаю, что большинство людей не ожидают, что валидатор изменит какие-либо данные. Таким образом, использование настраиваемых полей может упростить понимание кода другими людьми.   -  person Aleksi Torhamo    schedule 02.04.2011


Ответы (1)


Вы можете просто изменить порядок, в котором перечислены ваши валидаторы. Если ваши пользовательские валидаторы размещены перед необязательным валидатором, это должно обеспечить желаемый эффект, поскольку они оцениваются по порядку.

person dagoof    schedule 06.04.2011
comment
Я понимаю, что это с опозданием на 10 лет, но в более поздних версиях WTForms добавление необязательного отменяет все остальные проверки. - person user3832673; 16.06.2021