【问题标题】:Flask WTF form not updating with the sqlite3 databaseFlask WTF 表单未使用 sqlite3 数据库更新
【发布时间】:2013-01-15 23:56:27
【问题描述】:

我有一个 RadioField 表单项,它使用数据库中的字段值。

如果未创建数据库,我将无法启动 Flask Webserver,即使它只应在我转到该页面并加载该表单时访问该数据库。

如果我在网络服务器运行时更​​新数据库,我看不到包含新数据库信息的表单。

直到我重新启动 Flask 网络服务器。

我怎样才能得到它,以便它在您访问页面时强制表单从数据库中重新加载其值。

我也很确定它将 RadioField 的值存储在内存中,因为我可以删除数据库并且 Flask Webserver 将继续运行并且 RadioField 仍将显示。

我正在使用 sqlite3 数据库并使用 APSW(另一个 python sqlite3 包装器)对其进行读写

这是我的表格

class DatabaseForm(Form):
    listOfRows = db.getDatabase()
    rows = [(str(x[0]), x) for x in listOfRows]
    images = RadioField('images', validators = [Required()], choices = rows)

这是我的观点

@app.route('/database', methods = ['GET', 'POST'])
def database():
    ''' displays the database and allows the user to select an entry '''
    form = DatabaseForm()
    if form.validate_on_submit():

        primaryKey = form.images.data
        primaryKey = int(primaryKey)


        myProgram.start(primaryKey)
        return render_template('simple.html', word = "SUCCESS")
    else:
        print form.errors

    return render_template('database.html', form=form)

【问题讨论】:

    标签: python python-2.7 flask flask-sqlalchemy flask-wtforms


    【解决方案1】:

    您应该在视图中设置字段选择:

        form = DatabaseForm()
        form.images.choices = [(str(x[0]), x) for x in listOfRows]
        if form.validate_on_submit():
    

    通过在类上设置一次,选项仅在类被实例化时设置,因此它们不会反映在该特定进程的生命周期内所做的任何更改。

    【讨论】:

      猜你喜欢
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 2021-08-06
      • 1970-01-01
      • 2018-03-13
      • 2021-06-06
      • 1970-01-01
      相关资源
      最近更新 更多