首页 > 解决方案 > WTForms Flask(wtf_flask) 验证器如何包含 RadioField 的“必需”属性

问题描述

我基本上在寻找的是InputRequired()用于 WTForms 的 RadioField 等效验证器。我的意思是当您尝试提交表单而不在具有InputRequired()验证器的 StringField 字段中输入任何文本时,用户会在文本字段上方收到提示"Please fill out this field"。我希望用户必须选择malefemale

这很容易在 HTML 表单中完成,只需在 HTML 表单中包含required属性即可。但我似乎无法理解 RadioField 的 WTForms 中的等价物是什么。InputRequired()并且DataRequired()都只用于输入文本字段,似乎不适用于任何其他类型的字段。

如果我有以下非常简单的 WTForms 注册表单类,InputRequired()则在这种情况下效果很好,因为它会在用户"Please fill out this field"忘记输入nameor时给出提示surname。除非他们在这些字段中输入,否则表单将不会提交。

class Signup(FlaskForm):
name = StringField('First Name', validators=[InputRequired()])
surname = StringField('Last Name', validators=[InputRequired()])
submit = SubmitField('Signup')

但是,如果我有下面的带有 RadioField 的表单,那么强制用户选择的等效验证器是什么,Male或者Female如果他们不选择一个我想给出提示"please fill out this field"?(我正在使用 BootStrap)我似乎找不到任何关于它的信息。它存在吗?第二个答案中的这个问题基本上有我正在寻找的东西,Required="Required"但自 2018 年 6 月以来已经过时了。我尝试了几乎所有尝试使用或InputRequired()但没有成功的方法。DataRequired()RadioField

class StudentPersonalQs(FlaskForm):
gender = RadioField('Gender', choices = [('Male','Male'),('Female','Female')])
age = SelectField('Age', choices = [('12', '12'), ('13', '14'),('15', '15'), ('16', '16'),('17', '17'), ('18+', '18+')])
submit = SubmitField('Signup')

标签: pythonflaskflask-wtformswtforms

解决方案


IMO,您目前只能使用这种方式来实现:

{% for subfield in form.age %}
    <tr>
        <td>{{ subfield(required="required") }}</td>
        <td>{{ subfield.label }}</td>
    </tr>
{% endfor %}

推荐阅读