Django 测试客户端使用已登录的超级用户重定向到登录页面

The Django test client redirects to the login page with a logged-in superuser

问题

我正在尝试将超级用户连接到 Django 测试客户端,然后使用 GET 方法访问 Django 管理界面中的页面。但是,即使超级用户已正确登录,我也会重定向到登录页面。

代码

def test(self) -> None:
    client = Client()
    user = User.objects.create(username='user', is_superuser=True)
    client.force_login(user)
    response = client.get(f'/admin/management/establishment/', follow=True)

    print("Redirect chain\t", response.redirect_chain)
    print("Request user\t", response.wsgi_request.user)
    print("Is superuser\t", response.wsgi_request.user.is_superuser)

输出

Redirect chain   [('/admin/login/?next=/admin/management/establishment/', 302)]
Request user     user
Is superuser     True

附加信息

问题

你知道为什么我有这个重定向以及我如何避免它吗?

问题来源

似乎使用 is_superuser=True 将用户设置为超级用户不允许他们访问 Django 管理界面。

只有员工才能登录,所以必须在用户创建中添加is_staff=True属性。

令人惊讶的是,默认情况下超级用户不被视为员工。

解决方案

使用以下行创建用户不会重定向到登录页面:

user = User.objects.create(username='user', is_superuser=True, is_staff=True)