具有自定义验证方法的WTForms表单永远无效

2024-09-27 00:22:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想获取用户输入日期的数据,如果没有输入任何内容,则为当前日期。我使用WTForms创建一个带有日期输入的表单,如果日期字段有数据,则重写validate返回{}。但是,即使我输入了日期,表单也总是无效的。为什么这个没用?在

class ChooseDate(Form):
    date = DateField(format='%m-%d-%Y')

    def validate(self):
        if self.date.data is None:
            return False
        else:
            return True

@app.route('/index', methods=['GET', 'POST'])
def index():
    date_option = ChooseDate()
    print(date_option.date.data)  # always None

    if date_option.validate():
        request_date = date_option.date.data
    else:
        request_date = datetime.today().date()

    return render_template_string(template_string, form=date_option, date=request_date)

Tags: 数据selfnone表单datadateindexreturn
1条回答
网友
1楼 · 发布于 2024-09-27 00:22:01

您没有正确重写validatevalidate触发表单读取数据并填充字段的data属性。您没有调用super,所以这种情况永远不会发生。在

def validate(self):
    res = super(ChooseDate, self).validate()
    # do other validation, return final res

在本例中,没有理由重写validate,您只是试图确保为该字段输入了数据,所以使用内置的InputRequired验证器。使用字段验证器也会将错误消息添加到表单中。在

^{pr2}$

有关validation的更多信息,请参阅文档。在

最后,需要将表单数据传递给表单。如果您使用的是Flask-WTF扩展名的FlaskForm,则会自动传递该扩展名。在

from flask import request

form = ChooseDate(request.form)

相关问题 更多 >

    热门问题