如何从 Flask 中的 QuerySelectField 传递数据?
How to pass data from a QuerySelectField in flask?
在我的应用程序中,我有一个 QuerySelectField 来填充下拉菜单。
我从数据库中获取查询 select 字段的选择详细信息。一旦用户 select 从下拉菜单中选择任何选项并单击 POST 方法的提交按钮,我想将用户 select 从下拉菜单编辑的值传递给数据库进行存储。但它总是 return 来自查询 select 字段的值 None。所以 db 将数据存储为 None.
models.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)))
forms.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")
views.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('/')
QuerySelectField#__init__
's query_factory
argument should return a SQLAlchemy Query
object, not a Python list. WTForms will materialize the query itself, by iterating over it。只需将您的工厂函数更改为 return query
属性,而不是列表:
def possible_res():
return Resturant.query
def possible_menu():
return Menu.query
在我的应用程序中,我有一个 QuerySelectField 来填充下拉菜单。 我从数据库中获取查询 select 字段的选择详细信息。一旦用户 select 从下拉菜单中选择任何选项并单击 POST 方法的提交按钮,我想将用户 select 从下拉菜单编辑的值传递给数据库进行存储。但它总是 return 来自查询 select 字段的值 None。所以 db 将数据存储为 None.
models.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)))
forms.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")
views.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('/')
QuerySelectField#__init__
's query_factory
argument should return a SQLAlchemy Query
object, not a Python list. WTForms will materialize the query itself, by iterating over it。只需将您的工厂函数更改为 return query
属性,而不是列表:
def possible_res():
return Resturant.query
def possible_menu():
return Menu.query