【发布时间】:2018-07-13 13:01:07
【问题描述】:
每当我使用 WTForms 编辑表单时,它不会更新记录,而是将其添加为新记录。
我已经在 Flaskr 示例应用程序中复制了这个,所以它一定是我做错了,但我不确定是什么。
我在这里下载了 Flaskr:https://github.com/lepture/flask-wtf/tree/master/examples/flaskr
这是一个简单的表单,有两个输入字段 - 标题和文本。可以提交表单,并将条目保存到 sqlite 数据库。
我尝试修改它以允许更新条目。
class Entry(db.Model):
__tablename__ = "entries"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.Unicode(200))
text = db.Column(db.UnicodeText)
class EntryForm(FlaskForm):
title = TextField("Title", validators=[DataRequired()])
text = TextAreaField("Text")
submit = SubmitField("Share")
@app.route('/add', methods=['POST'])
def add_entry():
if not session.get('logged_in'):
abort(401)
form = EntryForm()
if form.validate():
entry = Entry()
form.populate_obj(entry)
# entry.id=1
db.session.add(entry)
db.session.commit()
flash('New entry was successfully posted')
else:
flash("Your form contained errors")
return redirect(url_for('show_entries'))
我添加了一种新方法来使用现有条目填充表单:
@app.route('/edit/<int:id>', methods=['GET'])
def edit_entry(id=None):
entries = Entry.query.order_by(Entry.id.asc())
entry = Entry.query.get(id)
form = EntryForm(obj=entry)
return render_template('show_entries.html', entries=entries, form=form)
然后我通过表单添加了一个新条目并导航到http://127.0.0.1:5000/edit/1,它确实使用我刚刚创建的条目填充了表单。
但是,当重新发布表单时,它不会更新数据库中的现有记录,而是插入一条新记录。我想可能是因为 ID 未在“条目”对象中设置,但我什至在保存它之前手动将其设置为 1,它仍然尝试进行插入(并且使 PK 约束失败)而不是更新。
【问题讨论】:
标签: python flask sqlalchemy wtforms