Как проверить DateField в WTForms - PullRequest
0 голосов
/ 17 мая 2019

В моем приложении для колб у меня есть WTForm с двумя инструментами выбора даты для «даты начала» и «даты окончания».Каков наилучший способ проверить, что «дата окончания» не раньше, чем «дата начала»?

from flask_wtf import FlaskForm
from wtforms.fields.html5 import DateField
from wtforms import SubmitField 

class Form(FlaskForm):
    startdate_field = DateField('Start Date', format='%Y-%m-%d')
    enddate_field = DateField('End Date', format='%Y-%m-%d')
    submit_field = SubmitField('Simulate')

Единственное, что я нашел по этой теме, был этот валидатор:

 wtforms_html5.DateRange

Нашел здесь: https://pypi.org/project/wtforms-html5/0.1.3/, но, похоже, это старая версия wtforms-html5.

1 Ответ

1 голос
/ 22 мая 2019

Я понял это. В классе формы можно определить метод validate_{fieldname}, который проверяет соответствующее поле. Этот метод принимает в качестве аргументов field и form, поэтому я могу ссылаться на поле startdate как form.startdate_field. Вот код:

from flask_wtf import FlaskForm
from wtforms import SubmitField
from wtforms.validators import ValidationError
from wtforms.fields.html5 import DateField

class Form(FlaskForm):
    startdate_field = DateField('Start Date', format='%Y-%m-%d')
    enddate_field = DateField('End Date', format='%Y-%m-%d')
    submit_field = SubmitField('Next')

    def validate_enddate_field(form, field):
        if field.data < form.startdate_field.data:
            raise ValidationError("End date must not be earlier than start date.")
...