После многочисленных испытаний я смог успешно выполнить редактирование.Итак, сначала я запросил фильтрацию всех категорий в этой таблице с помощью идентификатора записи (возвращает список кортежей), например [(62, 1), (62, 4)].Кортеж (post_id, tag_id).
categories = db.Table('categories', db.Column('post_id', db.Integer, db.ForeignKey('posts.id'), primary_key=True), db.Column('tag_id', db.Integer, db.ForeignKey('tags.id'), primary_key=True))
Затем я создал кортеж, который я использовал для реализации условия if, где, если этот кортеж (ы) существует в списке из категорий, он игнорируется ив базу данных передается только уникальный.
Вот новая функция просмотра:
@home.route('/edit/<int:id>', methods=['GET', 'POST'])
@login_required
def edit_post(id):
post = Post.query.get_or_404(id)
if current_user != post.author and not current_user.can(Permission.ADMINISTER):
abort(403)
form = PostForm()
form.tag.choices = [(tag.id, tag.name) for tag in Tag.query.order_by('name')]
if form.validate_on_submit():
post.body = form.body.data
# query the post-tag relationship for this post id
posttags = db.session.query(categories).filter_by(post_id=id).all()
for id in form.tag.data:
# custom tuple
if (post.id, id) not in posttags:
post.tags.append(Tag.query.get(id))
db.session.commit()
return redirect(url_for('.view_post', id=post.id))
form.body.data = post.body
form.tag.choices = [(tag.id, tag.name) for tag in Tag.query.order_by('name')]
form.tag.data = post.tags.all()
return render_template('home/edit_post.html', form=form, title='Edit Post')