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

时间:2017-07-04 10:42:36

标签: django authentication 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')

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

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

4 个答案:

答案 0 :(得分:6)

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

首先,.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')

答案 1 :(得分:2)

您可能需要设置user.is_active = False,然后保存user对象。

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

答案 2 :(得分:1)

你也需要保存它:

user.is_active = False
user.save()

答案 3 :(得分:0)

调用user.is_active = False后,您需要通过调用user.save()

将更改写入数据库