Flask WTF表单未使用sqlite3数据库进行更新

时间:2013-01-31 19:10:04

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

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

如果没有创建数据库,我就无法启动Flask Web服务器,即使它只应该在我转到该页面并加载该表单时访问数据库。

如果我在Web服务器运行时更​​新数据库,我看不到带有新数据库信息的表单。

直到我重新启动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)

1 个答案:

答案 0 :(得分:3)

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

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

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