Как передать данные из QuerySelectField в колбе?

В моем приложении у меня есть QuerySelectField для заполнения выпадающего меню. Я получаю информацию о выборе для поля queryselect из базы данных. После того, как пользователь выберет любой вариант из раскрывающегося меню и нажмет кнопку «Отправить», которая является методом POST, я хочу передать значение, выбранное пользователем из раскрывающегося списка, в базу данных для хранения. Но он всегда возвращает значение None из поля выбора запроса. Таким образом, БД хранит данные как None.

модели.py

class Orders(db.Model):
    __tablename__ = 'orders'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    email = db.Column(db.String(120))
    resturant = db.Column(db.String(64))
    food = db.Column(db.String(64)))

формы.py

def possible_res():
    return Resturant.query.all()

def possible_menu():
    return Menu.query.all()

class OrderForm(Form):

    sel_res = QuerySelectField(query_factory=possible_res,
                               get_label='name')

    sel_menu = QuerySelectField(query_factory=possible_menu,
                                get_label='food',
                                allow_blank=False
                                )
    submit = SubmitField("Confirm")

просмотры.py

@app.route('/resturant', methods=['GET','POST'])
def resturant():
    form = OrderForm()
    if request.method == 'GET':
        test = form.sel_menu.data
        return render_template("make_order.html", form=form, test=test)
    else:
        a = User.query.filter_by(email = session['email']).all()
        for u in a:
            name = u.firstname

        b = Orders(name=name, email=session['email'])
        b.resturant = form.sel_res.data
        b.food = form.sel_menu.data
        db.session.add(b)
        db.session.commit()
        return redirect('/')

person navodissa    schedule 30.01.2015    source источник


Ответы (1)


Аргумент query_factory QuerySelectField#__init__ query_factory должен возвращаться объект SQLAlchemy Query, а не Список питона. WTForms материализует сам запрос, путем итерации над ним. Просто измените свои фабричные функции, чтобы они возвращали атрибут query, а не список:

def possible_res():
    return Resturant.query

def possible_menu():
    return Menu.query
person Sean Vieira    schedule 30.01.2015