我想停用用户帐户而不是删除它。我想做像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,它会显示成功消息但不做任何事情。当我在管理面板中检查用户时,它仍然会将用户标记为活动。
任何想法我怎么能做到这一点?提前致谢
答案 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()