我正在尝试通过下面的表单操作按钮传递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 constraint failed: post.user_id [SQL: UPDATE post SET user_id=? WHERE post.id = ?] [parameters: (None, 2)] (Background on this error at: http://sqlalche.me/e/gkpj)
最佳答案
如果用户仍有关联的帖子,则无法删除该用户,因为这些帖子不会有被您的 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()
关于python - SQLAlchemy 使用路由查询错误的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58641035/