Ok, więc dziękuję Danielowi i Doobehowi za wskazanie mi właściwych kierunków. Zasadniczo sprowadzało się to do tego, że nie zażądałem poprawnie identyfikatora bloga w metodzie POST edit_entry. Oto nowy (i działający) kod.
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)
Skończyły się na tym, że pojawiły się dwa główne problemy. Pięść była przeoczeniem:kiedy skopiowałem szablon edit_entry z szablonu new_entry, zapomniałem zmienić akcję formularza, więc formularz był wysyłany na trasę nowe_wpis, stąd duplikacja. Po znalezieniu tego problemu zdałem sobie również sprawę, że chociaż blog_id był przekazywany w request.args do metody „GET”, nie był przekazywany w metodzie „POST” (ponieważ post nie pochodził z przekierowania), więc Właściwie utworzyłem nowe pole w szablonie edit_entry, aby przekazać identyfikator blog_id z powrotem do POST.