Django在路试中禁止了HttpResponse

Django在路试中禁止了HttpResponse,django,tdd,Django,Tdd,我试图获得接近100%的测试覆盖率,在Django管理特性的测试中遇到了403错误,如下所示: class AdminTest(LiveServerTestCase): def setUp(self): self.client = Client() self.my_admin = User(username='user', is_staff=True) self.my_admin.set_password('password')

我试图获得接近100%的测试覆盖率,在Django管理特性的测试中遇到了403错误,如下所示:

class AdminTest(LiveServerTestCase):
    def setUp(self):
        self.client = Client()
        self.my_admin = User(username='user', is_staff=True)
        self.my_admin.set_password('password')
        self.my_admin.save()

        (...)

    def testCreatePost(self):
        self.client.get('/admin/', follow=True)
        loginResponse = self.client.login(username='user',password='password')
        self.assertTrue(loginResponse)

        response = self.client.get('/admin/blog/post/add/', follow=True)
        self.assertEqual(response.status_code, 200)
错误发生在最后一行:

self.assertEqual(response.status_code, 200)
AssertionError: 403 != 200

手动登录到
客户端。获取
URL有效。通过的部分测试表明,我可以登录到管理页面,但是,我无法访问Post模型的“添加”页面

设置
is_staff=True
允许您访问管理员。它不允许您自动访问所有管理员页面。您需要“添加博客文章”权限才能访问页面以添加博客文章

最简单的选择是创建一个超级用户,然后他们将拥有访问该页面的权限

self.my_admin = User(username='user', is_staff=True, is_superuser=True)
self.my_admin.set_password('password')
self.my_admin.save()
使用密码,这将简化为:

self.my_admin = User.objects.create_superuser('user', email=None, password='password')
或者,您可以手动向用户(或该用户所属的组)添加所需的权限


谢谢你的快速修复,阿拉斯代尔!如果将来有人会偶然发现这一点:
是否是\u staff
-登录admin所必需的;不会授予权限
是超级用户
-权限所必需的;将不授予管理员登录。
from django.contrib.auth.models import User, Permission
self.my_admin = User(username='user', is_staff=True)
permission = Permission.objects.get(content_type__model='blog', codename='add_blog')
self.my_admin.user_permissions.add(permission)