Я пытаюсь создать форму с двумя полями отправки — фильтром и отправкой. Для фильтра у меня есть поле выбора со списком имен, и если они выбирают имя, я хочу отфильтровать существующую страницу на основе этого имени. Для отправки у меня есть радио-поле, и я хочу перейти на другую страницу в зависимости от выбора. Для фильтра я не хочу никакой проверки радиополя, а для отправки я не хочу никакой проверки поля выбора.
Кажется, это нормально работает с моим полем выбора — оно проверяется только тогда, когда я нажимаю кнопку «Фильтр». Но для радиополя он всегда проверяется, и я получаю следующее, независимо от того, какую кнопку я нажимаю:
[Недействительный выбор]
Вот мои фрагменты кода. HTML:
<h2>Filter</h2>
<p>
{{ form.player.label }}<br>
{{ form.player }}
{% for error in form.player.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.filter() }}</p>
<h2>Games to be played</h2>
<p>
{{ form.result.label }}<br>
{{ form.result }}
{% for error in form.result.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.submit() }}</p>
Форма:
class MatchupsForm(FlaskForm):
player = SelectField(u'Filter by Player', coerce=int)
filter = SubmitField('Filter')
result = RadioField(u'Select Game to Update', coerce=int)
submit = SubmitField('Update')
def validate_player(self, player):
if (player.data == 0) and self.filter.data:
raise ValidationError("Please select a Name to filter on")
return False
return True
def validate_result(self, result):
if not result.data and self.submit.data:
raise ValidationError("Please select a Matchup")
return False
return True
Я пробовал предложение из Flask-WTForms Как сделать переопределить предварительную проверку на Radio Fields, создав
def pre_validate(self, form):
for v, _ in self.choices:
if self.data == v:
break
else:
raise ValueError(self.gettext('Need a Matchup'))
Но и это не сработало — я получаю ту же ошибку. Обратите внимание, что мои дополнительные валидаторы, похоже, работают правильно — когда я нажимаю «Фильтр без выбора игрока», я вижу эту ошибку, но если я нажимаю «Отправить без выбора результата», я вижу как ошибку по умолчанию, так и мою настроенную.
[Недействительный выбор] [Пожалуйста, выберите матч]
Цените любые идеи о том, как заставить эту работу работать.
Попробуйте вручную создать скрытое поле с тем же именем, что и ваше RadioField, и присвоить ему значение, которое вы можете вручную проверить при отправке формы.
stackoverflow.com/help/how-to-ask — person Nate; 27.05.2021