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



我有一个烧瓶WTForms表单,我从我的数据库字段预填充。从那里,我想让用户更新任何字段的值,如果他们选择并重新插入到数据库中。下面示例代码的具体问题是,当我提交表单时,表单中没有看到任何数据。数据字典(打印在第18行)。这些字段是空的,即使我已经输入了信息。我猜是form.field1。数据仍然保持它从数据库中获取的值(第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"中执行。在"之后"的情况。因此,我将改变两个块的顺序,并将其重写为:

@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...

最新更新