SQLAlchemy запрашивает неверную таблицу с использованием маршрута - PullRequest
1 голос
/ 31 октября 2019

Я пытаюсь передать user_id через приведенную ниже кнопку действия формы

<form action="{{ url_for('users.user_delete', user_id=user.id)}}" method="POST">
     <input type="submit" class="btn btn-danger" value="Delete">
</form>

, затем я использую приведенный ниже маршрут для запроса пользователя и удаления из db

@users.route("/user/<int:user_id>/delete",methods=['POST'])
@login_required
def user_delete(user_id):
   user = User.query.filter_by(id=user_id).first()
   db.session.delete(user)
   db.session.commit()
   flash("User has been deleted", "success")
   return redirect(url_for('users.admin_panel'))

Однако по какой-то причине он запрашивает другую таблицу, и это ошибка:

sqlalchemy.exc.IntegrityError sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) Не выполнено ограничение NOT NULL: post.user_id [SQL: ОБНОВЛЕНИЕ поста SET user_id =? ГДЕ post.id =?] [Параметры: (нет, 2)] (Справочная информация об этой ошибке в: http://sqlalche.me/e/gkpj)

1 Ответ

1 голос
/ 31 октября 2019

Вы не можете удалить пользователя, если у него все еще есть сообщения, связанные с ним, потому что у сообщений не будет автора, который запрещен вашей моделью Post. Вы можете предотвратить это, сначала удалив сообщения пользователей, а затем пользователя, либо установив для параметра nullable значение True в столбце user_id в модели Post

. должно работать:

user = User.query.filter_by(id=user_id).first()
db.session.delete(user.posts)
db.session.delete(user)
db.session.commit()
...