You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在测试中反转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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:08:42