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

Form data not submitted when textarea already filled

我正在使用 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 更改将被保存。

那么如何预填充文本区域并确保保存对文本的任何更改?

您还没有分享您的 MyForm 的代码,这本来会有所帮助,因为您发布的 link 中接受的答案建议在表单创建中使用 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)