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'))

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

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

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

См. также:  Связывание атрибута href в Jinja2 и Vuejs
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Nate

    Попробуйте вручную создать скрытое поле с тем же именем, что и ваше RadioField, и присвоить ему значение, которое вы можете вручную проверить при отправке формы.

    stackoverflow.com/help/how-to-ask person Nate; 27.05.2021

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: