Я делаю WTForm, которая принимает десятичные числа в качестве входных данных, и я пытаюсь ограничить входные данные диапазоном чисел (от 0 до 10 включительно). Однако валидатор NumberRange
, похоже, ничего не делает.
Python (с использованием колбы):
from flask import render_template
from flask_wtf import FlaskForm
from wtforms import DecimalField, SubmitField, validators
class NumberForm(FlaskForm):
question = DecimalField('Question 1',
[validators.NumberRange(min=0, max=10, message="blah"),
validators.Optional()])
submit = SubmitField('Submit')
@app.route('some_route/', methods=['GET', 'POST])
def page():
form = NumberForm()
if form.validate_on_submit():
return some_success_or_other
return render_template('page.html', form=form)
HTML:
<form method="POST">
<div class="form-group-row">
{{ form.hidden_tag() }}
{{ form.question.label }}
<div>
{{ form.question }}
</div>
</div>
<div class="form-group-row">
{{ form.submit }}
</div>
</form>
В поле question
будет отправлено любое введенное мной значение. Я думал, что он не разрешит текст и не допустит отрицательных чисел, ни чисел вне диапазона (например, 10000).
Я пытался изменить NumberRange
min и max на 0.0
и 10.0
. Я попытался убрать аргументы сообщения. Я пытался убрать валидатор Optional
. Но ничто из этого не мешает мне выйти за пределы диапазона номеров в форме.
(Когда я заменил Optional
на DataRequired
, форма не будет отправлена, если в поле не было данных, так что валидатор работал как минимум.)
Кто-нибудь знает, что я делаю не так?
Редактировать: кажется, что проблема была разделена на две части: нет проверки и сообщения проверки не мигают. Ответ ниже исправляет отсутствие проверки.