Как реализовать необязательный DateField с использованием Flask-WTF

Мне нужен параметр DateField, который является необязательным, но я получил ошибку "Недействительное значение даты", если оставить его пустым

Я добавляю несколько журналов в исходный код wtforms и обнаруживаю formdata.getlist(self.name) возвращает [u ''] для этого DateField

Код моей формы:

from wtforms import BooleanField, TextField, TextAreaField, PasswordField, validators, HiddenField, DateField, SelectField
from flask_wtf import Form

class EmployeeForm(Form):
    id = HiddenField('id')
    title = TextField('Title')
    start = DateField('Start Date', format='%m/%d/%Y')

Ответы

Ответ 1

Вы ищете валидатор Optional.

start = DateField('Start Date', format='%m/%d/%Y', validators=(validators.Optional(),))

Ответ 2

Довольно старая тема, но кто-то может столкнуться с той же проблемой, поэтому я предложу свой возможный ответ на этот вопрос. Добавление validators.Optional() здесь не помогает, потому что поле помечено как ошибка ранее на этапе обработки.
Вы можете исправить поведение процессора следующим образом:

class NullableDateField(DateField):
    """Native WTForms DateField throws error for empty dates.
    Let fix this so that we could have DateField nullable."""
    def process_formdata(self, valuelist):
        if valuelist:
            date_str = ' '.join(valuelist).strip()
            if date_str == '':
                self.data = None
                return
            try:
                self.data = datetime.datetime.strptime(date_str, self.format).date()
            except ValueError:
                self.data = None
                raise ValueError(self.gettext('Not a valid date value'))