Được rồi, cảm ơn Daniel và Doobeh đã chỉ cho tôi đúng hướng. Về cơ bản, tôi không yêu cầu đúng blog_id trong phương thức POST của edit_entry. Đây là mã mới (và đang hoạt động).
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)
Cuối cùng có hai vấn đề lớn. Fist là một sự giám sát:khi tôi sao chép mẫu edit_entry từ mẫu new_entry, tôi đã quên thay đổi hành động của biểu mẫu, vì vậy biểu mẫu thực sự đang đăng lên tuyến new_entry, do đó sẽ bị trùng lặp. Sau khi tôi phát hiện ra vấn đề đó, tôi cũng nhận ra rằng mặc dù blog_id đã được chuyển trong request.args đến phương thức 'GET', nó không được chuyển trong phương thức 'POST' (vì bài đăng không đến từ chuyển hướng), vì vậy Tôi thực sự đã tạo một trường mới trong mẫu edit_entry để chuyển blog_id trở lại POST.