Вопросы

Flask-WTForms Как обойти автоматическую предварительную проверку для радиополей

Я пытаюсь создать форму с двумя полями отправки — фильтром и отправкой. Для фильтра у меня есть поле выбора со списком имен, и если они выбирают имя, я хочу отфильтровать существующую страницу на основе этого имени. Для отправки у меня есть радио-поле, и я хочу перейти на другую страницу в зависимости от выбора. Для фильтра я не хочу никакой проверки радиополя, а для отправки я не хочу никакой проверки поля выбора.

Кажется, это нормально работает с моим полем выбора — оно проверяется только тогда, когда я нажимаю кнопку «Фильтр». Но для радиополя он всегда проверяется, и я получаю следующее, независимо от того, какую кнопку я нажимаю:

[Недействительный выбор]

Вот мои фрагменты кода. 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'))

Но и это не сработало — я получаю ту же ошибку. Обратите внимание, что мои дополнительные валидаторы, похоже, работают правильно — когда я нажимаю «Фильтр без выбора игрока», я вижу эту ошибку, но если я нажимаю «Отправить без выбора результата», я вижу как ошибку по умолчанию, так и мою настроенную.

[Недействительный выбор] [Пожалуйста, выберите матч]

Цените любые идеи о том, как заставить эту работу работать.

Читать:
Пользовательская аутентификация Laravel: маршрут [логин] не определен

Похожие записи

Нелинейный генератор фазового портрета

admin

Не удается получить динамическое представление прокрутки, размер которого соответствует его содержимому, работающему

admin

Не удается найти метод из User.js

admin

Как хранить журналы транзакций в блокчейне?

admin

in недействителен на этой позиции

admin