【问题标题】:How to validate a DateField in WTForms如何在 WTForms 中验证 DateField
【发布时间】:2019-05-17 11:16:26
【问题描述】:

在我的烧瓶应用程序中,我有一个带有两个日期选择器的 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 的旧版本。

【问题讨论】:

  • this answer 有帮助吗?
  • 链接的答案对我不起作用。它引发了错误,因为它试图在填充字段之前比较两个日期。

标签: python flask wtforms


【解决方案1】:

我想通了。在表单类中,可以定义一个方法validate_{fieldname} 来验证相应的字段。此方法将fieldform 作为参数,因此我可以将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.")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2013-11-22
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多