验证WTForms和Jinja中不存在的字段

时间:2019-11-07 16:32:21

标签: flask jinja2 wtforms validationerror

长时间搜索后没有答案,我不得不向您寻求帮助。

我正在使用WTForms在Flask中开发应用程序。

我正在尝试验证表单,但没有验证特定字段。在每个教程或文档中,我都找到了如何在Jinja中捕获验证错误

{%,如果form.field.errors%},依此类推...

如果我没有特定字段,如何捕捉验证错误?如何捕捉Jinja中的一般错误?

这是我的表单和模板:

forms.py
class VacationForm(FlaskForm):
    vac_start = DateField('Start Vacation', validators=[DataRequired()])
    vac_end = DateField('End Vacation', validators=[DataRequired()])
    half_day = BooleanField('Half Day')
    submit = SubmitField('Submit')

    def validate(self):
        start = self.vac_start.data
        end = self.vac_end.data
        if start > end:
            raise ValidationError('error')

template.html

<form method="POST" action="">
    {{ form.hidden_tag() }}
     {{ form.vac_start(class='form-control col-6',type='date') }}
     {{ form.vac_end(class='form-control col-6',type='date') }}
        {{ form.half_day }}
     {{ form.submit }}
  </form>

我总是进入错误页面,但是我想在“提交”按钮或日期字段下的某个地方输出错误。 我相信我在做些简单的事,但我只是想不通。

谢谢。

2 个答案:

答案 0 :(得分:0)

只需将错误附加到字段:

self.submit.errors.append("My message")
return False

不要引发ValidationError-如果发生验证错误,则简单地返回False(否则返回True)。

答案 1 :(得分:0)

所以我有了主意,可以验证vac_end字段,并且它以某种方式有效:D

这是代码。

    vac_start = DateField('Start Vacation', validators=[DataRequired()])
    vac_end = DateField('End Vacation', validators=[DataRequired()])
    half_day = BooleanField('Half Day')
    submit = SubmitField('Submit')

    def validate_vac_end(self, vac_end):
        if self.vac_start.data > vac_end.data:
            raise ValidationError('Wrong dates')


{% if form.vac_end.errors %}
        {% for error in form.vac_end.errors %}
            {{ error }}
        {% endfor %}
    {% endif %}