文本区域已填充时未提交表单数据
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)
我正在使用 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)