Flask-WTF Dynamic radiofield выполняет новый запрос при отправке формы - PullRequest
0 голосов
/ 26 июня 2018

Я работаю над созданием викторины с множественным выбором с Flask-WTF и SQLAlchemy, которая выбирает случайные кавычки и возможные ответы из таблицы базы данных. Я был в состоянии сделать это. Однако, когда форма отправлена ​​и выбранные ответы сохранены в новой таблице базы данных, я вижу, что фактические вопросы (цитаты) и ответы были изменены. Похоже, что новый запрос выполняется при отправке формы. Вот простой пример того, что я имею в виду.

Актуальный вопрос по викторине с опциями

Кто сказал ... "Небо голубое".

  1. Фрэнк (выбран в качестве ответа)
  2. Harry
  3. Anne
  4. Mary

Данные, сохраненные в базе данных

Вопрос: Кто сказал ... «Яблоко красное».

Выбранный ответ: Том

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

Вот моя форма:

    class Quiz(FlaskForm):
        q1 = RadioField('', coerce=str, validators=[DataRequired()], choices=[])
        q2 = RadioField('', coerce=str, validators=[DataRequired()], choices=[])
        q3 = RadioField('', coerce=str, validators=[DataRequired()], choices=[])
        q4 = RadioField('', coerce=str, validators=[DataRequired()], choices=[])
        q5 = RadioField('', coerce=str, validators=[DataRequired()], choices=[])

И мой вид маршрута:

    @app.route('/quiz/', methods=['GET', 'POST'])
    def quiz():
        form = Quiz()
        for field in form:
            if field.type != "RadioField":
                continue
            else:
                pulls = Quotes.query.order_by(func.rand()).limit(1)
                for pull in pulls:
                    answer = pull.speaker
                    option_two = pull.option_two
                    option_three = pull.option_three
                    option_four = pull.option_four
                    question = pull.line_text
                    field.label = pull.line_text
                    field.choices = [("1", answer), ("2", option_two), ("3", option_three), ("4", option_four)]
        if form.validate_on_submit():
            for field in form:
                if field.type == "CSRFTokenField":
                    continue
                else:
                    user_answer = field.data
                    question_id = field.id
                    question_line = field.label
                    correct_answer = answer
                    submission = Responses(question_id, question_line, user_answer, correct_answer)
                    db.session.add(submission)
                    db.session.commit()
            return redirect(url_for('you_passed'))
        return render_template('quiz.html', form=form)

Любая помощь будет оценена. Я также открыт для любых предложений о моем текущем коде. Я новичок в Python и не достиг элегантности в своем коде. Спасибо.

...