如何在测试中反转Django Admin自定义的upload_csv URL?
解决Django ModelAdmin自定义视图的URL反转测试问题
别急,这个问题我刚好碰到过,Django admin自定义视图的URL反转其实有固定的规则,我给你捋清楚:
Django会自动给ModelAdmin的自定义URL名称加上**应用标签(app_label)+ 模型名称(小写)**的前缀,所以你不能直接用reverse('upload_csv')来反转,得按照下面的格式来:
reverse('admin:<app_label>_<model_name>_upload_csv')
举个实际例子
假设你的ModelAdmin是针对myapp应用下的MyModel模型,那反转代码应该写成:
from django.urls import reverse # 反转自定义上传视图的URL url = reverse('admin:myapp_mymodel_upload_csv')
在测试中的完整用法
在测试用例里,你可以这么写(记得确保测试用户有admin权限哦):
from django.test import TestCase from django.urls import reverse from django.contrib.auth.models import User class UploadCSVAdminTest(TestCase): def setUp(self): # 创建一个有admin权限的测试用户 self.admin_user = User.objects.create_superuser( username='admin', password='testpass123', email='admin@example.com' ) self.client.login(username='admin', password='testpass123') def test_upload_csv_url_reverse(self): # 替换成你自己的app_label和model_name url = reverse('admin:myapp_mymodel_upload_csv') # 发起请求测试 response = self.client.get(url) # 验证页面能正常访问(如果你的视图允许GET请求的话) self.assertEqual(response.status_code, 200)
关键注意点
- 必须使用
admin:作为URL命名空间的前缀 <app_label>是你模型所在应用的名称(小写)<model_name>是你的模型类名称的小写形式- 测试时要先登录admin用户,否则会返回302重定向到登录页或者403权限错误
内容的提问来源于stack exchange,提问作者kater
相关产品推荐
相关产品推荐

