Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Uma atualização do Flask-SQLAlchemy está criando um novo registro no MySQL


Ok, então obrigado a Daniel e Doobeh por me apontar as direções certas. Basicamente, eu não estava solicitando o blog_id corretamente no método POST de edit_entry. Aqui está o novo (e funcionando) código.
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)

Acabaram surgindo dois grandes problemas. Punho foi um descuido:quando copiei o template edit_entry do template new_entry, esqueci de alterar a ação do formulário, então o formulário estava realmente postando na rota new_entry, daí a duplicação. Depois de encontrar esse problema, também percebi que, embora blog_id fosse passado em request.args para o método 'GET', ele não estava sendo passado no método 'POST' (já que o post não vinha do redirecionamento), então Na verdade, criei um novo campo no modelo edit_entry para passar o blog_id de volta ao POST.