Задать вопрос
@osipyanarsen

Почему в процессе работы веб-приложения на Flask не обновляется форма, связанная с базой данных?

На сайте есть возможность добавлять сорта кофе, а так же рецепты к каждому сорту (в форме создания рецепта нужно указать сорт кофе, который понадобится для приготовления). Проблема заключается в том, что если запустить веб-приложение командой flask run, создать новый сорт, а затем попытаться создать рецепт, то в списке сортов нового не будет, а появится он только после перезапуска сервера.

Это код страницы с формой добавления нового сорта:
@app.route('/new_sort', methods=['GET', 'POST'])
@login_required
def new_sort():
    if current_user.email not in app.config["ADMINS"]:
        return redirect(url_for('index'))
    form = SortForm()
    if form.validate_on_submit():
        sort = Sort(title=form.title.data,
                    user_id=current_user.id,
                    bouquet=form.bouquet.data,
                    description=form.description.data)
        db.session.add(sort)
        db.session.commit()
        flash('Новый сорт добавлен!')
        return redirect(url_for('index'))
    return render_template('sort_form.html', title='Новый сорт', form=form, ADMIN_EMAILS=Config.ADMINS)


Аналогично для рецепта:
@app.route('/new_recipe', methods=['GET', 'POST'])
@login_required
def new_recipe():
    form = RecipeForm()
    if form.validate_on_submit():
        recipe = Recipe(title=form.title.data,
                        user_id=current_user.id,
                        sort_id=Sort.query.filter_by(title=str(form.sort_id.data)).first().id,
                        coffee_mass=form.coffee_mass.data,
                        water_mass=form.water_mass.data,
                        water_temp=form.water_temp.data,
                        grinding=form.grinding.data,
                        acidity=form.acidity.data,
                        tds=form.tds.data,
                        body=form.body.data)
        db.session.add(recipe)
        db.session.commit()
        flash('Новый рецепт добавлен!')
        return redirect(url_for('index'))
    return render_template('recipe_form.html', title='Новый рецепт', form=form, ADMIN_EMAILS=Config.ADMINS)


А вот класс RecipeForm (sort_id - часть формы, который не обновляется в процессе работы сервера):
class RecipeForm(FlaskForm):
    title = StringField('Название рецепта:', validators=[DataRequired(EMPTY_FIELD)])
    sort_id = SelectField("Выберите название кофе:", validators=[DataRequired(EMPTY_FIELD)],
                          choices=Sort.query.all())
    coffee_mass = DecimalField("Масса кофе, г:", validators=[DataRequired(EMPTY_FIELD)])
    water_mass = IntegerField("Масса воды, мл:", validators=[DataRequired(EMPTY_FIELD)])
    water_temp = IntegerField("Температура воды, C:", validators=[DataRequired(EMPTY_FIELD)])
    acidity = IntegerField("Кислотность (оцените сами от 0 до 10):")
    tds = IntegerField("Насыщенность (оцените сами от 0 до 10):")
    grinding = DecimalField("Помол:", validators=[DataRequired(EMPTY_FIELD)])
    body = TextAreaField("Шаги", validators=[DataRequired(EMPTY_FIELD)])
    submit = SubmitField("Добавить"
  • Вопрос задан
  • 130 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@medvedodesa
использовать QuerySelectedField

and after add :

return redirect(request.referrer)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы