我正在尝试通过下面的表单操作按钮传递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>
然后我正在使用以下路线查询用户并从数据库中删除
@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:UPDATE后,SET user_id =? WHERE post.id =?] [参数:(无, 2)](此错误的背景位于:http://sqlalche.me/e/gkpj)
答案 0 :(得分:1)
如果该用户仍然有与之相关的帖子,则无法删除,因为该帖子不会包含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()