如何验证 WTForms 中的 DateField

otw*_*wtm 4 python flask wtforms

在我的烧瓶应用程序中,我有一个带有两个日期选择器的 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')
Run Code Online (Sandbox Code Playgroud)

我在这个主题上唯一发现的是这个验证器:

 wtforms_html5.DateRange
Run Code Online (Sandbox Code Playgroud)

在这里找到:https : //pypi.org/project/wtforms-html5/0.1.3/ 但它似乎是 wtforms-html5 的旧版本。

otw*_*wtm 10

我想到了。在表单类中,可以定义一种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.")
Run Code Online (Sandbox Code Playgroud)