【问题标题】:Flask WTForms new inputs are not overwriting prepopulated data upon submissionFlask WTForms 新输入在提交时不会覆盖预填充的数据
【发布时间】:2021-02-17 04:12:05
【问题描述】:

我有一个烧瓶 WTForms 表单,我正在使用我的数据库中的字段进行预填充。从那里我想让用户能够更新任何字段的值,如果他们选择并将其重新插入数据库。下面的示例代码遇到的具体问题是,当我提交表单时,form.data 字典中没有数据(打印在第 18 行)。即使我在其中输入了信息,这些字段也是空的。我的猜测是 form.field1.data 仍然保留它从数据库中所做的值(第 11 行),而不是接收用户输入的数据。

但是我无法弄清楚如何以其他方式构建表单以处理此问题。代码如下,谢谢

@hp_blueprint.route('/formpage',methods=['GET','POST'])
def build_form():

    #setup the QualitativeForm with values from the DB as placeholders
    with sfsql_engine.connect() as conn:
        df = pd.read_sql("SELECT * FROM MY_TABLE WHERE 1=1",conn)
    if len(df) == 0:
        form = QualitativeForm()
    else:
        form = QualitativeForm()
        form.field1.data = df['field1'].values[0]
        form.field2.data = df['field2'].values[0]
        form.field3.data = df['field3'].values[0]

    #write to DB upon submission
    if form.is_submitted() and form.validate():
        #WHEN I PRINT THIS OUT, IT DOES NOT HOUSE ANY OF THE DATA THAT I JUST TYPED IN
        print(form.data)
        print("the form update worked properly")
        field1 = form.field1.data
        field2 = form.field2.data
        field3 = form.field3.data

        with sfsql_engine.connect() as conn:
            conn.execute("INSERT INTO MY_TABLE(field1,field2,field3) VALUES (%s,%s,%s)",
                      field1,field2,field3)
        print("inserts ran correctly")
        return redirect('/formpage')

【问题讨论】:

    标签: python html flask jinja2 flask-wtforms


    【解决方案1】:

    对我来说,您似乎在 else 语句中覆盖了表单的值 - 代码将在“get”和“post”两种情况下执行。因此,我会更改两个块的顺序并像这样重写它:

    @hp_blueprint.route('/formpage',methods=['GET','POST'])
    def build_form():
    
        form = QualitativeForm()
    
        #write to DB upon submission
        if form.is_submitted() and form.validate():
            #WHEN I PRINT THIS OUT, IT DOES NOT HOUSE ANY OF THE DATA THAT I JUST TYPED IN
            print(form.data)
            print("the form update worked properly")
            field1 = form.field1.data
            field2 = form.field2.data
            field3 = form.field3.data
    
            with sfsql_engine.connect() as conn:
                conn.execute("INSERT INTO MY_TABLE(field1,field2,field3) VALUES (%s,%s,%s)",
                          field1,field2,field3)
            print("inserts ran correctly")
            return redirect('/formpage')
    
        #setup the QualitativeForm with values from the DB as placeholders
        with sfsql_engine.connect() as conn:
            df = pd.read_sql("SELECT * FROM MY_TABLE WHERE 1=1",conn)
    
        if len(df) > 0:
            form.field1.data = df['field1'].values[0]
            form.field2.data = df['field2'].values[0]
            form.field3.data = df['field3'].values[0]
    
        # return the template with the form or continue with the code...
    

    【讨论】:

    • 这工作得很好,我刚刚被我最初实例化表单的方式所吸引。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多