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

Django--停用用户帐户而不是删除它,django,authentication,django-models,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.e

我想停用用户帐户,而不是删除它。我想做一些类似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,它显示成功消息,但不执行任何操作。当我在管理面板中检查用户时,它仍然会将用户标记为活动


你知道我怎样才能做到这一点吗?提前感谢

您可能需要设置
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')

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

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

其次,
User
是类;实例是
user

第三,您根本没有理由在这里进行查询<代码>请求。用户已经是用户实例。无需获取该用户,获取其配置文件,向该配置文件请求用户ID,然后再执行另一个查询以获取您开始使用的用户。只需使用您已有的用户即可

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

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

您也需要保存它:

user.is_active = False
user.save()

调用
user.is\u active=False
后,您需要通过调用
user.save()

@Daniel Roseman将更改写入数据库,实际上,此视图中存在更多的逻辑错误。对不起,你这么无知。如果我可以问一下,鉴于您在这个上下文方面有更多的经验和知识,用户是否需要在这个所谓的删除之后注销?如果我使用这个查询,代码就不起作用了。我只是简单地做了user=request.user,它工作了是的,这比我的代码要好得多。我学到了一些新东西。谢谢,伙计。@FazilZaid关于注销的观点很好。我很确定中间件会在下一次页面加载时将用户标记为匿名,但这是值得明确的。