如何在WTForms中验证DateField

4

在我的flask应用中,我有一个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
这个答案有帮助吗? - arshovon
链接的答案对我没有用。它引发了一个错误,因为它尝试在字段填充之前比较两个日期。 - otwtm
1个回答

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

1
这个问题的最佳答案,它在2022年仍然有效。谢谢! - Taylor D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接