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

如何将Django Admin detail view重定向逻辑移至admin.py文件?

解决Django CMS Admin详情页自动跳转至列表页的问题

完全理解你的困扰——在模板里硬写重定向逻辑虽然能跑,但确实不够优雅,把这个逻辑移到admin.py里才是更符合Django Admin规范的做法,而且代码会整洁很多。

你只需要在对应的Admin类里覆盖change_view方法就可以了,这个方法正是Django用来处理模型详情(修改)页面的核心方法。直接在方法里返回重定向到列表页的响应就行,不需要再依赖模板:

from django.contrib import admin
from django.shortcuts import redirect
from cms.models import YourTargetModel  # 替换成你要处理的Django CMS模型

class YourTargetModelAdmin(admin.ModelAdmin):
    def change_view(self, request, object_id, form_url='', extra_context=None):
        # 方式1:用Admin类自带的changelist_url属性,更简洁省心
        return redirect(self.changelist_url)
        
        # 方式2:如果需要更灵活的URL控制,用reverse手动生成
        # return redirect(reverse('admin:cms_yourtargetmodel_changelist'))

# 如果是Django CMS自带的模型(比如Page、Placeholder),记得先解除默认注册再重新注册
admin.site.unregister(YourTargetModel)
admin.site.register(YourTargetModel, YourTargetModelAdmin)

简单解释下原理:

  • change_view是ModelAdmin中负责渲染单个对象详情页的方法,我们直接覆盖它,跳过默认的模板渲染流程,直接返回重定向响应。
  • self.changelist_url是Admin类内置的属性,自动指向当前模型的列表页URL,用这个比手动写reverse更省心,也不容易因为URL命名变化出错。
  • 如果是Django CMS自带的系统模型,必须先调用admin.site.unregister解除默认的Admin绑定,再用自定义的Admin类重新注册才能生效。

这样修改后,用户只要访问该模型的详情页,就会被直接跳转到列表页,所有逻辑都集中在admin.py里,完全不需要碰模板代码,是不是清爽多了?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:10:17