Python WTForms可以';似乎无法验证SelectField框
我已经为员工创建了一个选择字段来选择他们的名字。 我的目标是,当用户没有选择他们的名字,而是离开选择“--”上的下拉框时,在这种情况下,我希望ValidationError然后打印它的消息。目前,当我测试这个时,没有打印任何内容 这是我的forms.py文件:Python WTForms可以';似乎无法验证SelectField框,python,flask,wtforms,flask-wtforms,Python,Flask,Wtforms,Flask Wtforms,我已经为员工创建了一个选择字段来选择他们的名字。 我的目标是,当用户没有选择他们的名字,而是离开选择“--”上的下拉框时,在这种情况下,我希望ValidationError然后打印它的消息。目前,当我测试这个时,没有打印任何内容 这是我的forms.py文件: from flask_wtf import Form from wtforms import StringField, BooleanField, SelectField from wtforms.validators import Da
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)
以下是与此表单相关的my 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 %}
{%extends“base.html”%}
{%block content%}
搜寻
{{form.staff}}选择您的姓名
{%endblock%}
有人能看出我做错了什么,或者提出一个不会让我的大脑融化的替代方案吗!英雄联盟
谢谢据我所知,您的代码中有两个错误:
表单中包含一个值。在提交()时验证方法将始终返回False。还要确保将app.config['SECRET\u KEY']
设置为某个值
数据
引用了您在选项列表中传递的元组的第一个值
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\u staff
函数传递给StaffNames表单的validators列表,否则将永远不会触发验证。我相应地更改了上述代码。