我正在尝试验证DecimalRangeField
,以便要求用户提供输入。问题是我想要一个默认值,例如50(滑块出现在中间),这导致内置验证器DataRequired
和InputRequired
(我都尝试过)失败,因为它们采用了默认值作为给定的分数,即使用户没有显示任何操作(至少这是我认为的情况)。
如何获得一些默认值,但仍要检查用户是否采取了任何措施(即使最后与默认值相同,也要在滑块上的某个位置单击),并显示错误消息,例如“此字段必填以防用户未触摸滑块?我需要为此使用自定义验证器吗?
谢谢您的建议。
以下是相关的代码部分:
index.py
@app.route("/questionnaire1", methods=['GET', 'POST'])
def controlAndDeliberation():
form = controlAndDeliberationForm()
if form.validate_on_submit():
return redirect(url_for())
return render_template('control_and_deliberation.html', form=form)
questionnaires.py
class controlAndDeliberationForm(FlaskForm):
perceivedControlQ1 = DecimalRangeField(
'1. How much control did you feel you have?',
default=50,
validators=[DataRequired()]
)
control_and_deliberation.html
<div class="form-group">
{{ form.perceivedControlQ1.label }}<br>
{{ form.perceivedControlQ1 }}
{% for error in form.perceivedControlQ1.errors %}
<span style="color: #d60000; font-size: 15px">{{ error }}</span>
{% endfor %}
</div>
答案 0 :(得分:1)
这可能最好在前端进行处理(除非有人出现来纠正我)。
您可以使用Javascript阻止表单提交,并显示一条消息,直到用户单击滑块为止。
否则,您将不得不拒绝某个值并重新加载页面并闪烁一条错误消息,告诉用户将滑块从“ 50”移开。这里的问题是,由于它是一个滑块,因此用户不必提供输入,因此它总是在表单提交时发送数字值。