Okay, danke an Daniel und Doobeh, die mich in die richtige Richtung gewiesen haben. Im Grunde kam es darauf an, dass ich die blog_id in der POST-Methode von edit_entry nicht richtig angefordert habe. Hier ist der neue (und funktionierende) Code.
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)
Am Ende gab es zwei große Probleme. Faust war ein Versehen:Als ich die edit_entry-Vorlage aus der new_entry-Vorlage kopierte, vergaß ich, die Aktion des Formulars zu ändern, sodass das Formular tatsächlich auf der new_entry-Route gepostet wurde, daher die Duplizierung. Nachdem ich dieses Problem gefunden hatte, stellte ich auch fest, dass blog_id zwar in request.args an die 'GET'-Methode übergeben wurde, aber nicht in der 'POST'-Methode (da der Beitrag nicht von der Umleitung kam). Ich habe tatsächlich ein neues Feld in der edit_entry-Vorlage erstellt, um die blog_id zurück an POST zu übergeben.