Добре, така че благодаря на Daniel и Doobeh, че ме насочиха в правилните посоки. По принцип се стигна до това, че не съм поискал правилно blog_id в метода POST на edit_entry. Ето новия (и работещ) код.
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)
В крайна сметка има два основни проблема. Юмрук беше пропуск:когато копирах шаблона edit_entry от шаблона new_entry, забравих да променя действието на формуляра, така че формулярът всъщност публикуваше към маршрута new_entry, по този начин дублирането. След като открих този проблем, разбрах също, че докато blog_id беше предаден в request.args към метода 'GET', той не се предаваше в метода 'POST' (тъй като публикацията не идваше от пренасочването), така че Всъщност създадох ново поле в шаблона edit_entry, за да предам blog_id обратно на POST.