填充文本区域后未提交表单数据

时间:2018-10-10 14:40:43

标签: python html jinja2 flask-wtforms

我正在使用WTForms和Jinja2创建具有可编辑文本区域的页面。这个想法是在数据库中编辑文本,因此应该已经在文本区域中填充了文本供用户编辑。

基于this question / answer,我有类似 以下代码:
app.py中:

form = MyForm() # MyForm is defined elsewhere simply as 
                # class MyForm(FlaskForm): content=TextAreaField()
prepopulated = GetTextFromDatabase()
form.content.data = prepopulated

if form.validate_on_submit():
    new_content = form.content.data
    SaveToDatabase(new_content)

return flask.render_template('edit.html', form=form)

edit.html中:

<form method="POST">
  <div>
    {{ form.hidden_tag() }}
    {{ form.content }}
  </div>
  <div>
    <button type="submit">Submit</button>
  </div>
</form>

但是,提交时,对文本所做的更改不会保存在数据库中。如果删除form.content.data = prepopulated,则更改将保存。

那么我该如何预先填充文本区域,同时确保对文本所做的任何更改都已保存?

1 个答案:

答案 0 :(得分:1)

您尚未共享MyForm的代码,这对您有所帮助,因为您发布的链接中的可接受答案建议在表单创建步骤中使用default参数。

之所以不起作用,是因为如果用户POSTS到您的路线的表单比您做的所有都要覆盖数据,然后再使用以下代码验证表单:

prepopulated = GetTextFromDatabase()
form.content.data = prepopulated

为什么不先尝试验证表单数据并执行数据库保存,如下所示:

if form.validate_on_submit():
    new_content = form.content.data
    SaveToDatabase(new_content)
else:
    prepopulated = GetTextFromDatabase()
    form.content.data = prepopulated

return flask.render_template('edit.html', form=form)