Я пытаюсь создать форму с двумя полями отправки — фильтром и отправкой. Для фильтра у меня есть поле выбора со списком имен, и если они выбирают имя, я хочу отфильтровать существующую страницу на основе этого имени. Для отправки у меня есть радио-поле, и я хочу перейти на другую страницу в зависимости от выбора. Для фильтра я не хочу никакой проверки радиополя, а для отправки я не хочу никакой проверки поля выбора.
Кажется, это нормально работает с моим полем выбора — оно проверяется только тогда, когда я нажимаю кнопку «Фильтр». Но для радиополя он всегда проверяется, и я получаю следующее, независимо от того, какую кнопку я нажимаю:
[Недействительный выбор]
Вот мои фрагменты кода. 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’))
Но и это не сработало — я получаю ту же ошибку. Обратите внимание, что мои дополнительные валидаторы, похоже, работают правильно — когда я нажимаю «Фильтр без выбора игрока», я вижу эту ошибку, но если я нажимаю «Отправить без выбора результата», я вижу как ошибку по умолчанию, так и мою настроенную.
[Недействительный выбор] [Пожалуйста, выберите матч]
Цените любые идеи о том, как заставить эту работу работать.
Источник: