使用后退按钮时,WTForms表单显示无效

时间:2016-03-21 15:59:19

标签: python flask wtforms flask-wtforms

我正在构建Flask应用程序并使用WTF表单。

我的主页面使用MainForm,它有一个选择字段来选择'租户',两个日期字段和一个提交按钮,重定向到另一个页面。 MainForm看起来像:

class MainForm(Form):
    tenant = SelectField('Tenant', choices=get_tenants())
    start_date = DateField('From',
                       [validators.DataRequired('Please enter a valid date'),
                        DateRange(min=datetime(2013, 04, 01).date(), max=datetime.now().date())],
                       format='%Y-%m-%d', default=datetime.now().date())
    end_date = DateField('To',
                     [validators.DataRequired('Please enter a valid date'),
                      DateRange(min=datetime(2013, 04, 01).date(), max=datetime.now().date())],
                     format='%Y-%m-%d', default=datetime.now().date())
    room_stats = SubmitField('Room Stats')

在新页面/room-stats中,有另一个表单只有一个“后退”按钮,可以重定向到主页面。它看起来像:

class StatsForm(Form):
    back = SubmitField('Back')

视图函数如下所示:

@main.route('/', methods=['GET', 'POST'])
@login_required
def index():
    form = MainForm()
    if form.validate_on_submit():
        session['start_date'] = str(form.start_date.data)
        session['end_date'] = str(form.end_date.data)

        if current_user.is_administrator():
            session['username'] = str(form.tenant.data)
        else:
            session['username'] = str(current_user.username)

        if form.room_stats.data:
            return redirect(url_for('main.room_stats'))

    return render_template('index.html', form=form)

@main.route('/room-stats')
@login_required
def room_stats():
    form = StatsForm()

    [MORE_CODE_HERE]

    if form.validate_on_submit():
        if form.back.data:
            return redirect(url_for(index))

    return render_template('stats/room_stats.html', form=form)

最后,room_stats.html文件的格式如下:

<form action="/" method="post">
    {{ form.hidden_tag() }}
    {{ wtf.quick_form(form) }}
</form>

该应用程序通常运行正常,但验证存在问题。每次我点击Back按钮并返回主表单时,Tenant字段会以红色突出显示并显示消息

  

不是一个有效的选择

即使该字段有值且不是空白。

我认为验证出了问题,但我无法弄清楚是什么。 同样奇怪的是Tenant字段没有验证器,为什么会出现此错误消息?

0 个答案:

没有答案