@radeon3850
Начинающий разработчик python

Почему не подтягивает данные в форму выбора Flask?

Не разобрался почему, Flask не подтягивает с базы данные для формы (Wtf-Forms) для типа поля SelectField, после добавления новых данных в базу данных а только после перезагрузки сервера.
Форма создания заказа клиента - но при этом можно выбрать существующего клиента с базы данных (поле формы SelectField) или добавить нового клиента в сплывающей форме а после его выбрать в поле выбора клиента. И если мы добавляем клиента через форму он в базе появляется, но в форму выбора подтягивается только после перезапуска сервера.
Код формы
class AddOrder(FlaskForm):
    choices_client = [(client.id, (client.first_name, client.last_name, client.phone_number)
                        ) for client in (db.session.query(Clients).all())]
    client_id = SelectField('Выбрать Клиента', choices=choices_client)
    name_order = StringField('Название заказа: ', validators=[DataRequired()])
    stone = StringField('Камень: ', validators=[DataRequired()])
    object_description = TextField ('Описание Обэкта: ', validators=[DataRequired()])
    address = StringField('Адрес объекта: ', validators=[DataRequired()])
    deadline = DateField('Дата Завершения(в формате - год-месяц-день) : ', format='%Y-%m-%d', validators=[DataRequired()])
    submit = SubmitField('Отправить')

Обработка запроса с получение данных с БД
@app.route('/add_order', methods = ['GET', 'POST'])
@login_required
def add_order():
    form_add_client = AddClient()
    if form_add_client.is_submitted():
        client = Clients(first_name=form_add_client.first_name.data, last_name=form_add_client.last_name.data, phone_number=form_add_client.phone.data)
        db.session.add(client)
        db.session.commit()
        flash('Клиент добавлен в базу')
        return redirect(url_for('add_order'))
    form=AddOrder()
    if form.is_submitted():
        client_order=OrderClient(clients_id=form.client_id.data, title_order=form.name_order.data, title_stone=form.stone.data,
                                 object_description=form.object_description.data, address=form.address.data,
                                 deadline=form.deadline.data)
        db.session.add(client_order)
        db.session.commit()
        flash('Заказ покупателя добавлен')
        return redirect(url_for('index'))
    return render_template("add_order.html", title='Создание заказа клиента', form=form, form_add_client=form_add_client)


63a2c3e513659051704264.png63a2c3f2c453e713538122.png
63a2c418ea0d3303547625.png
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 1
ramzis
@ramzis
FullStackOverflow
Почему не подтягивает данные в форму

Потому что, `db.session.query(Clients).all()` вызываеться один раз, после определения класса.

Решение.
...
form=AddOrder()
form.client_id.choices = [(client.id, (client.first_name, client.last_name, client.phone_number)) for client in (db.session.query(Clients).all())]
...
Ответ написан
Ваш ответ на вопрос

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

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