![](/img/trans.png)
[英]WTForms: I can't seem to dynamically give a QuerySelectField a default value
[英]WTForms can't seem to validate a SelectField box
我为员工创建了一个选择字段,供他们选择姓名。 我的目标是用户不选择名称时,而是将下拉框保留在选项“ ---”上。在这种情况下,我希望ValidationError然后打印它的消息。 目前,当我对此进行测试时,什么都没有打印。
这是我的forms.py文件:
from flask_wtf import Form
from wtforms import StringField, BooleanField, SelectField
from wtforms.validators import DataRequired, Required, ValidationError
class StaffNames(Form):
staff = SelectField(
'staff',
choices=[("", "---"), ('1', 'John Jones'), ('2', 'Chris Hughes'), ('3', 'Lyn Fox')],
)
def validate_staff(form, field):
if field.data is "---":
raise ValidationError("Sorry, you havn't chosen a staff name")
这是我的view.py文件:
from flask import render_template, flash, redirect
from app import app
from .forms import StaffNames
@app.route('/')
@app.route('/index', methods=['GET', 'POST'])
def index():
form = StaffNames()
if form.validate_on_submit():
return redirect('/results')
return render_template('index.html',
title='RA Index Search',
form=form)
这是与这种形式有关的我的index.html:
<!-- extend base layout -->
{% extends "base.html" %}
{% block content %}
<center>
<h1>Search</h1>
<form action="" method="post" name="login">
<p>{{ form.staff }} Select your name</p>
<p><input type="submit" value="Search"></p>
</form>
{% endblock %}
谁能看到我在做错什么,还是提出一种不会让我的大脑融化的替代方案! 哈哈谢谢
据我所知,您的代码中有两个错误:
您需要在模板表单中包含csrc_token,否则form.validate_on_submit()
方法将始终返回False。 还要确保将app.config['SECRET_KEY']
为某个值。
在您的验证方法中,检查SelectBox的data属性是否为“ ---”。 因为这永远不会发生data
指的是你在你的名单传元组的第一个值choices
。
按照以下方式更改您的validate_staff
方法,就可以了:
def validate_staff(form, field):
if field.data == "":
raise ValidationError("Sorry, you havn't chosen a staff name")
class StaffNames(Form):
staff = SelectField(
'staff',
choices=[
("", "---"), ('1', 'John Jones'), ('2', 'Chris Hughes'), ('3', 'Lyn Fox')],
validators=[validate_staff],
)
注意:您需要将validate_staff
函数传递给StaffNames表单的验证器列表,否则将永远不会触发验证。 我相应地更改了上面的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.