sql >> Base de Datos >  >> RDS >> Mysql

Una actualización de Flask-SQLAlchemy está creando un nuevo registro en MySQL

Bien, gracias a Daniel y Doobeh por indicarme las direcciones correctas. Básicamente, se redujo a que no solicité el blog_id correctamente en el método POST de edit_entry. Aquí está el código nuevo (y funcional).

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)

Terminó habiendo dos problemas importantes. Fist fue un descuido:cuando copié la plantilla edit_entry de la plantilla new_entry, olvidé cambiar la acción del formulario, por lo que el formulario en realidad se estaba publicando en la ruta new_entry, por lo tanto, la duplicación. Después de encontrar ese problema, también me di cuenta de que mientras blog_id se pasaba en request.args al método 'GET', no se pasaba en el método 'POST' (ya que la publicación no provenía de la redirección), entonces De hecho, creé un nuevo campo en la plantilla edit_entry para pasar el blog_id de vuelta a POST.