Проверить несуществующее поле в WTForms и Jinja - PullRequest
0 голосов
/ 07 ноября 2019

после долгого поиска и отсутствия ответов я должен попросить вас о помощи.

Я занимаюсь разработкой приложения во Flask, используя WTForms.

Я пытаюсь проверить форму, но я не проверяю конкретное поле,В каждом уроке или документации я обнаружил, как отлавливать ошибки проверки в Jinja

{% if form.field.errors%} и т. Д. *

Как я могу отловить ошибку проверки, если янет конкретного поля? Как отловить общую ошибку в Jinja?

Вот моя форма и шаблон:

forms.py
class VacationForm(FlaskForm):
    vac_start = DateField('Start Vacation', validators=[DataRequired()])
    vac_end = DateField('End Vacation', validators=[DataRequired()])
    half_day = BooleanField('Half Day')
    submit = SubmitField('Submit')

    def validate(self):
        start = self.vac_start.data
        end = self.vac_end.data
        if start > end:
            raise ValidationError('error')

template.html

<form method="POST" action="">
    {{ form.hidden_tag() }}
     {{ form.vac_start(class='form-control col-6',type='date') }}
     {{ form.vac_end(class='form-control col-6',type='date') }}
        {{ form.half_day }}
     {{ form.submit }}
  </form>

Я всегда попадаю на страницу с ошибкой, но я хочу, чтобы ошибка вывода была где-то под кнопкой отправки или в поле даты. Я верю, что делаю что-то легкое, но я просто не могу понять.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Итак, у меня появилась идея проверить поле vac_end, и оно как-то работает: D

Вот код.

    vac_start = DateField('Start Vacation', validators=[DataRequired()])
    vac_end = DateField('End Vacation', validators=[DataRequired()])
    half_day = BooleanField('Half Day')
    submit = SubmitField('Submit')

    def validate_vac_end(self, vac_end):
        if self.vac_start.data > vac_end.data:
            raise ValidationError('Wrong dates')


{% if form.vac_end.errors %}
        {% for error in form.vac_end.errors %}
            {{ error }}
        {% endfor %}
    {% endif %}
0 голосов
/ 07 ноября 2019

Просто добавьте ошибку в поле:

self.submit.errors.append("My message")
return False

Не вызывайте ValidationError - просто верните False в случае ошибки проверки (и в противном случае верните True).

...