【发布时间】:2026-01-16 23:40:01
【问题描述】:
我正在尝试为 change_list 视图中的管理员操作编写测试。我提到了this question,但无法进行测试。这是我的代码和问题:
class StatusChangeTestCase(TestCase):
"""
Test case for batch changing 'status' to 'Show' or 'Hide'
"""
def setUp(self):
self.categories = factories.CategoryFactory.create_batch(5)
def test_status_hide(self):
"""
Test changing all Category instances to 'Hide'
"""
# Set Queryset to be hidden
to_be_hidden = models.Category.objects.values_list('pk', flat=True)
# Set POST data to be passed to changelist url
data = {
'action': 'change_to_hide',
'_selected_action': to_be_hidden
}
# Set change_url
change_url = self.reverse('admin:product_category_changelist')
# POST data to change_url
response = self.post(change_url, data, follow=True)
self.assertEqual(
models.Category.objects.filter(status='show').count(), 0
)
def tearDown(self):
models.Category.objects.all().delete()
我尝试使用print 来查看响应是什么,这就是我得到的:
<HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/admin/login/?next=/admin/product/category/">
它似乎需要我的登录凭据 - 我尝试在 setUp() 中创建一个用户并按照 Django docs on testing 登录,但它似乎不起作用。
任何帮助将不胜感激!
【问题讨论】:
-
是的,你需要创建一个用户,然后登录测试客户端。请说明您尝试了什么以及发生了什么。
-
@Alasdair 谢谢!我重新尝试了它(在睡了一会儿之后)并意识到我没有实例化 django 的
Client类,因此登录并没有在我的后续请求中持续存在。感谢您指出我正确的方向:)
标签: django django-admin django-admin-actions