Django--取消激活用户帐户而不是删除它

Mes*_*zil 0 authentication django django-models

我想停用用户帐户而不是删除它.我想做像user.is_active = False这样的事情.我有一个视图删除用户配置文件,它的工作原理,但现在我需要将其更改为仅停用.这是我的观点:

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')
Run Code Online (Sandbox Code Playgroud)

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

任何想法我怎么能做到这一点?提前致谢

Dan*_*man 8

您应该显示不起作用的代码.但是,根据你的描述,你做了一些错误的事情.

首先,.filter()始终返回一个查询集,而不是一个实例.要获取实例,您应该使用.get().

其次,User是班级; 实例是user.

第三,你没有理由在这里进行查询.request.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')
Run Code Online (Sandbox Code Playgroud)