Oke, jadi terima kasih kepada Daniel dan Doobeh karena telah mengarahkan saya ke arah yang benar. Pada dasarnya saya tidak meminta blog_id dengan benar dalam metode POST dari edit_entry. Ini kode baru (dan berfungsi).
def edit_entry():
form = BlogEntry()
if request.method == 'POST':
blog_id = request.form.get('blog_id')
update = db.session.query(models.Blog).filter_by(id = blog_id).update({
'title': request.form.get('title'),
'content': request.form.get('content')
})
db.session.commit()
return redirect(url_for('blog'))
elif request.method == 'GET':
blog_id = int(request.args['blog_id'])
post = models.Blog.query.filter_by(id = blog_id).first_or_404()
context = {
'copyright': COPYRIGHT,
'form': form,
'blog_id': blog_id
}
form.title.data = post.title
form.content.data = post.content
return render_template('edit_entry.html', **context)
Akhirnya ada dua masalah utama. Tinju adalah kekeliruan:ketika saya menyalin template edit_entry dari template new_entry, saya lupa mengubah tindakan formulir, jadi formulir itu sebenarnya diposting ke rute new_entry, jadi duplikasi. Setelah saya menemukan masalah itu, saya juga menyadari bahwa sementara blog_id diteruskan di request.args ke metode 'GET', itu tidak diteruskan dalam metode 'POST' (karena posting tidak berasal dari pengalihan), jadi Saya sebenarnya membuat bidang baru di template edit_entry untuk meneruskan blog_id kembali ke POST.