wtforms中的SelectField结合sqlalchemy刷新机制是什么样的

发布于 2022-09-06 03:06:01 字数 1410 浏览 18 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

转身以后 2022-09-13 03:06:01

首先我建议你好好读读我写的这篇文章。
基于 flask 的 CRUD 操作

如果想要实现你的需求,你可以变通一下,把 choices 参数,从 form 类中赋值,放置到 view.py 视图函数的后一部分赋值。

但是这样的话,感觉不优雅,你还是好好看看文章吧。

黎歌 2022-09-13 03:06:01

感谢楼上给予我的意见,文章已拜读,蛮有收获。同时自己这个问题得到了解决。
首先贴上修改后的路由函数:

@app.route('/main/userAlloc/userAllocManage', methods=['GET', 'POST'])
def userAllocManage():
    from form import UserAllocForm
    from Odb_cx import add_user_func,user_query,func_query
    form = UserAllocForm()
    # 每次刷新列表
    form.login_name.choices=user_query()
    form.alloc_list.choices=func_query()
    print('请求:为用户赋权')
    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)

我的理解是这样的:当实例化UserAllocForm类时,程序会调用类中控件列表查询函数。而再次调用此页面时,由于这个类已经实例化了,所以只是复用,并不会再次请求列表。所以在路由函数中加上每次请求为控件的choice参数赋值即可(form.login_name.choices=user_query())。

白昼 2022-09-13 03:06:01

双簧演得不错

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文