如何使用Flask-WTF实现不需要的DateField

时间:2015-01-04 14:18:27

标签: flask wtforms flask-wtforms

我想要一个可选的DateField, 但是我得到了一个"不是一个有效的日期值"如果留空则错误

我在wtforms的源代码中添加了一些日志,并找到了 formdata.getlist(self.name)为此DateField返回[u'']

我的表格代码:

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')

2 个答案:

答案 0 :(得分:27)

您正在寻找Optional验证器。

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

答案 1 :(得分:0)

很老的话题,但是仍然有人会遇到相同的问题,因此我将给出可能的答案。 添加validators.Optional()在这里无济于事,因为在处理阶段之前将该字段标记为错误。
您可以像这样修补处理器的行为:

class NullableDateField(DateField):
    """Native WTForms DateField throws error for empty dates.
    Let's 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'))