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

如何反转Django Admin中特定模型动作对应的URL?

如何查找Django Admin动作的相关URL(含自定义动作)

我之前也碰到过这个头疼的问题——翻了好半天Stack Overflow和Django官方文档都没找到明确答案,折腾了一阵才摸清楚门路,特意整理出来帮大家避坑:

一、默认Admin动作的URL反向解析

你已经提到了,默认的Admin动作(比如change、delete、add这类)确实可以通过reverse(admin:appname_modelname_*)来反向生成URL,举几个常用的例子:

  • 模型列表页:reverse('admin:myapp_mymodel_changelist')
  • 新增对象页:reverse('admin:myapp_mymodel_add')
  • 编辑指定对象(需传入对象ID):reverse('admin:myapp_mymodel_change', args=[obj.id])
  • 删除指定对象(需传入对象ID):reverse('admin:myapp_mymodel_delete', args=[obj.id])

二、自定义Admin动作的URL获取方法

自定义动作的URL规则没在官方文档里明说,但其实有几个简单的方法能拿到:

1. 打印Admin站点的所有URL模式

Django会自动为每个注册的Admin模型生成对应的URL配置,你可以在项目里跑一段小代码,把所有Admin的URL名称都打印出来:

from django.contrib import admin
from django.urls import get_resolver

# 获取Admin站点的路由解析器
admin_urls = get_resolver(admin.site.urls)
# 遍历打印所有URL名称
for pattern in admin_urls.url_patterns:
    print(pattern.name)

运行之后,你就能看到所有已注册模型的动作URL名称,包括你自己定义的自定义动作(只要已经在ModelAdmin里注册过)。

2. 按规则手动构造URL名称

自定义动作的URL名称是有固定格式的:admin:appname_modelname_action函数名。

举个实际例子:假设你在myapp的MyModelAdmin里定义了一个叫mark_as_approved的自定义动作,那它的反向解析就是:

reverse('admin:myapp_mymodel_mark_as_approved')

注意哦,这个URL是批量动作的提交地址,一般需要配合POST请求,还要带上选中对象的ID参数。

3. 从页面源码里找

如果怕构造错,最简单的方法是打开Django调试模式,进入对应模型的Admin列表页,然后查看页面源码里的批量操作表单的action属性——里面就是自定义动作的完整URL,你可以直接提取出名称来做反向解析。

内容的提问来源于stack exchange,提问作者Sam Bobel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:40:33