我正在构建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
字段没有验证器,为什么会出现此错误消息?