Mysql
 sql >> Database >  >> RDS >> Mysql

Un aggiornamento di Flask-SQLAlchemy sta creando un nuovo record in MySQL

Ok, quindi grazie a Daniel e Doobeh per avermi indicato le giuste direzioni. Fondamentalmente mi è venuto in mente di non richiedere correttamente blog_id nel metodo POST di edit_entry. Ecco il nuovo (e funzionante) codice.

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)

Alla fine ci sono stati due problemi principali. Il pugno è stata una svista:quando ho copiato il modello edit_entry dal modello new_entry, ho dimenticato di modificare l'azione del modulo, quindi il modulo stava effettivamente pubblicando sul percorso new_entry, quindi la duplicazione. Dopo aver riscontrato il problema, mi sono anche reso conto che mentre blog_id è stato passato in request.args al metodo "GET", non veniva passato nel metodo "POST" (poiché il post non proveniva dal reindirizzamento), quindi In realtà ho creato un nuovo campo nel modello edit_entry per ritrasmettere blog_id a POST.