wtforms中的SelectField结合sqlalchemy刷新机制是什么样的
Flask写了两个页面,第一个是用户增加,第二个是获取数据库中的用户列表来修改信息。用户信息修改中用到了wtforms的SelectField控件,choices参数为调用数据库查询函数返回的字典。现在我发现当我增加完毕用户马上去维护信息时,用户列表并没有更新,也就是说SelectField并不是每次打开页面去查询列表。导致没办法对刚刚增加的用户进行修改。
路由函数:
@app.route('/main/userAlloc/userAllocManage', methods=['GET', 'POST'])
def userAllocManage():
from form import UserAllocForm
from Odb_cx import add_user_func
form = UserAllocForm()
if form.validate_on_submit():
login_name = form.login_name.data
alloc_list = form.alloc_list.data
print('调用用户权限入库函数')
message = add_user_func(login_name, alloc_list)
print(message)
flash(message)
return render_template('userAllocManage.html', Form=form)
form:
class UserAllocForm(Form):
from Odb_cx import func_query, user_query
login_name = SelectField('登录名称(手机号码):', choices=user_query())
alloc_list = SelectMultipleField('权限列表(可多选)', choices=func_query())
submit = SubmitField('提交')
列表查询函数:
def user_query():
try:
t = engine.execute("select a.sys_user_id,a.sys_user_name from sys_user a")
user_dict = []
for i in t:
user_dict.append((str(i[0]), i[1]))
return user_dict
except BaseException:
return '用户列表获取异常!'
现在希望每次请求/main/userAlloc/userAllocManage时从数据库获取最近的列表信息来初始化SelectField,求助各位如何实现
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
首先我建议你好好读读我写的这篇文章。
基于 flask 的 CRUD 操作
如果想要实现你的需求,你可以变通一下,把 choices 参数,从 form 类中赋值,放置到 view.py 视图函数的后一部分赋值。
但是这样的话,感觉不优雅,你还是好好看看文章吧。
感谢楼上给予我的意见,文章已拜读,蛮有收获。同时自己这个问题得到了解决。
首先贴上修改后的路由函数:
我的理解是这样的:当实例化UserAllocForm类时,程序会调用类中控件列表查询函数。而再次调用此页面时,由于这个类已经实例化了,所以只是复用,并不会再次请求列表。所以在路由函数中加上每次请求为控件的choice参数赋值即可(form.login_name.choices=user_query())。
双簧演得不错