为什么对 user.is_active 的更改没有被保存?

问题描述 投票:0回答:1

我最近正在尝试使用 Django 开发一个网站,其中一个人可以在系统中注册,但在管理员批准请求之前不应允许他/她登录系统。我尝试了 user.is_active 字段,但它唯一做的就是阻止新用户以管理员身份访问。换句话说,系统授予他/她登录系统的权限。我的代码如下:

#  create a new user but he will be inactive until admin's approval
user = User.objects.create_user(username=username, password=password)
user.is_active = False

将用户的 is_active 字段更改为 False 后,我尝试使用新用户的用户名和密码登录系统,系统允许我进入。这是我的登录代码:

def login(request):
    context = RequestContext(request)
    username = request.POST.get('username', '')
    password = request.POST.get('password', '')
    user = auth.authenticate(username = username, password = password)

    if user is not None and request.user.is_active:
        auth.login(request, user)
        print 'login'
        print request.user.username
        print request.user.is_active
        return redirect('app.views.results')

    else:
        print 'no login'
        return render(request, 'login.html')

当我打印用户的用户名和 is_active 字段时,我看到“is_active”字段为 True 而不是 False。代码有问题还是我遗漏了什么? 任何更好的解决问题的方法也将受到欢迎和赞赏。

python django
1个回答
2
投票

对模型对象的属性进行赋值后,应该调用object.save(),如下:

user = User.objects.create_user(username=username, password=password)
user.is_active = False
user.save()

这将保存您对对象所做的更改。

来自 Django 文档

© www.soinside.com 2019 - 2024. All rights reserved.