Eli*_*isa 7 python django django-unittest
我有自定义的save_model
管理员即
class MyModelAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
# some more question code here
obj.save()
Run Code Online (Sandbox Code Playgroud)
现在,我想测试 MyModelAdminsave_model
功能。我尝试发布如下:
class MyModelAdminSaveTestCase(TestCase):
def setUp(self):
# setup code here
def test_save_model(self):
'''Test add employee
'''
my_obj = {
'name': 'Tester',
'address': '12 test Test',
'city': 'New York',
'state': 'NY',
}
self.client.login(username=self.user, password=self.pwd)
response = self.client.post(reverse('admin:mymodel_mymodel_add'), my_obj, follow=True)
self.assertEqual(response.status_code, 200)
self.assertEqual(MyModel.objects.count(), 1)
Run Code Online (Sandbox Code Playgroud)
但是,测试失败:
self.assertEqual(MyModel.objects.count(), 1)
AssertionError: 0 != 1
Run Code Online (Sandbox Code Playgroud)
我的回答晚了 5 年,但也许对其他人有帮助。
要访问 django 管理员用户需要拥有is_staff=True
. 非员工用户被重定向到登录页面(这可能就是上面示例中发生的情况)。
此外,用户需要有足够的权限才能访问特定的管理页面(is_superuser=True
如果不需要测试权限,则可以简单地解决此问题)。
因此,像这样的客户端设置可能会解决该问题:
user = User.objects.create_superuser(username='super',
email='super@email.org',
password='pass')
client.login(username=user.username, password='pass')
# now you can access django admin
Run Code Online (Sandbox Code Playgroud)
response.context_data
如果出现问题,您可以检查以获取更多信息。
save_model
但我认为还有一种更干净的测试方法,请参阅此答案。