Flask WTForms 新输入不会在提交时覆盖预填充的数据

Flask WTForms new inputs are not overwriting prepopulated data upon submission

我有一个烧瓶 WTForms 表单,我正在用我的数据库中的字段预先填充它。从那里我想让用户更新任何字段的值,如果他们选择并将其重新插入数据库。我在下面的示例代码中遇到的具体问题是,当我提交表单时,form.data 字典(打印在第 18 行)中看不到任何数据。这些字段是空的,即使我已经在其中输入了信息。我的猜测是那个表单。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')

对我来说,您似乎在 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...