用于比较 Flask-WTForms 中两个日期字段的字段验证

Field validations to compare two date fields in Flask-WTForms

我有两个表单域:start_date 和 finish_date。现在我想检查 finish_date 是否大于或等于 start_date。我该如何实施?

class AddChallenge(FlaskForm):
    title = StringField('Title', validators=[DataRequired()])
    start_date = DateField('Start Date',
                           validators=[DataRequired(),
                                       DateRange(min=date.today())],
                           format='%Y-%m-%d', default=date.today)
    finish_date = DateField('Finish Date',
                            validators=[DataRequired(),
                                        DateRange(min=date.today())],
                            format='%Y-%m-%d', default=date.today)
    submit = SubmitField("Create")
class AddChallenge(FlaskForm):
    title = StringField('Title', validators=[DataRequired()])
    start_date = DateField('Start Date',
                           validators=[DataRequired()],
                           format='%Y-%m-%d', default=date.today)
    finish_date = DateField('Finish Date',
                            validators=[DataRequired()
                                        ],
                            format='%Y-%m-%d', default=date.today)
    submit = SubmitField("Create")

    def validate_finish_date(self, filed):
        if filed.data <= self.start_date.data:
            raise ValidationError('Finish date must more or equal start date.')

您可以使用此类命名规则来自定义验证规则。比如这个validate_yourfiledname.

刚遇到同样的问题,发现 增强了内置 validate() 功能。它解决了我的问题,并且与接受的答案基本相同。为了完整起见,在你的情况下:

class AddChallenge(FlaskForm):
    title = StringField('Title', validators=[DataRequired()])
    start_date = DateField('Start Date',
                           validators=[DataRequired()],
                           format='%Y-%m-%d', default=date.today)
    finish_date = DateField('Finish Date',
                            validators=[DataRequired()
                                        ],
                            format='%Y-%m-%d', default=date.today)
    submit = SubmitField("Create")

    # Custom validation function (redefine built-in)
    def validate(self, **kwargs):
        # Standard validators
        rv = FlaskForm.validate(self)
        # Ensure all standard validators are met
        if rv:
            # Ensure end date >= start date
            if self.start_date.data > self.finish_date.data:
                self.finish_date.errors.append('Finish date must be set after the starting date.')
                return False

            return True

        return False