Django--停用用户帐户而不是删除它

标签 django authentication django-models

我想停用用户帐户而不是删除它。我想做类似 user.is_active = False 的事情。我有一个删除用户配置文件的 View ,它可以工作,但现在我需要将其更改为仅停用。
这是我的观点:

def delete_profile(request):
    user = User.objects.filter(id = request.user.profile.user_id)
    try:
        user.delete()
    except:
        messages.error(request,'Please try again.')
        return redirect('profile')

    messages.success(request, 'Profile successfully deleted.')
    return redirect('index')

我试过 User.is_active = False ,它显示成功消息但没有做任何事情。当我在管理面板中检查用户时,它仍然会将用户标记为事件。

知道如何实现这一目标吗?提前致谢

最佳答案

您应该显示不起作用的代码。但是从你的描述来看,你做错了一些事情。

一、.filter()总是返回一个查询集,而不是一个实例。要获取实例,您应该使用 .get() .

其次,User是类(class);实例是 user .

第三,你有无故在这里做一个查询。 request.user已经是 User 实例。无需获取该用户,获取其个人资料,向该个人资料询问用户 ID,然后再进行另一次查询以取回您开始使用的用户。只需使用您已有的用户即可。

最后,永远,永远 做一个空白except ,因为这将捕获各种意外错误并隐藏任何可能出错的内容。只捕获您真正知道如何处理的异常。在这种情况下,您不需要处理任何特定的事情;如果出现任何意外错误,让 Django 正常报告该错误。

def delete_profile(request):
    user = request.user
    user.is_active = False
    user.save()
    messages.success(request, 'Profile successfully disabled.')
    return redirect('index')

关于Django--停用用户帐户而不是删除它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44903773/

相关文章:

django - 如果表达式为 True,则更改 django 管理界面中字段的字体/颜色

python - 在 django-filter 方法中获取当前用户

javascript - 获取 Facebook 身份验证对话框以重定向到运行我的应用程序的原始浏览器窗口

python - 一旦将某个字段转换为 Django 中的属性,如何防止该字段成为模型中的 "removed"?

Django 用户模型,添加功能

python - 重用 Django 模型

javascript - 在 Pycharm 中,我无法获取 JSON 文件并且无法安装 fetch

python - 如何在 Django 中过滤类别

security - 如何才能使网站只有在拥有加密狗的情况下才能访问?

android 到 django - 如何验证用户身份