Django Admin保存对象后如何重定向至应用详情视图?
实现Django Admin保存后重定向至应用详情视图
当然可以实现,下面是两种常用的解决方案:
1. 直接重写Admin类的response_change方法
这是最直接的方案,针对特定模型的Admin类修改保存后的跳转逻辑:
在你的应用的admin.py中,找到对应模型的Admin类,重写response_change方法:
from django.shortcuts import redirect from django.contrib import admin from .models import Project class ProjectAdmin(admin.ModelAdmin): # 这里保留你原有的Admin配置,比如list_display、fields等 list_display = ('name', 'created_at') def response_change(self, request, obj): # 替换成你应用内详情视图的URL名称和参数 # 假设详情视图的URL配置为 path('project/<int:pk>/', views.project_detail, name='project_detail') return redirect('project_detail', pk=obj.pk) # 如果URL带应用命名空间,比如'app_name:project_detail',就改成: # return redirect('app_name:project_detail', pk=obj.pk) admin.site.register(Project, ProjectAdmin)
这个方法会完全替换默认的跳转逻辑,用户点击保存后直接跳转到对应模型实例的详情页。
2. 动态传递跳转目标(适配多场景)
如果需要从不同页面进入Admin编辑,保存后返回原页面,可以通过next参数实现:
第一步:生成带next参数的编辑链接
在详情视图的模板中,生成Admin编辑链接时带上当前页面的路径作为next参数:
<!-- 模板中的编辑按钮 --> <a href="{% url 'admin:app_name_project_change' project.pk %}?next={{ request.path }}">编辑</a>
第二步:在Admin类中读取next参数跳转
修改Admin类的response_change方法,优先使用next参数指定的跳转目标:
from django.shortcuts import redirect from django.contrib import admin from django.utils.http import is_safe_url from .models import Project class ProjectAdmin(admin.ModelAdmin): list_display = ('name', 'created_at') def response_change(self, request, obj): next_url = request.GET.get('next') # 验证URL安全性,防止恶意跳转 if next_url and is_safe_url(next_url, allowed_hosts=request.get_host()): return redirect(next_url) # 如果没有next参数, fallback到默认的详情页跳转 return redirect('project_detail', pk=obj.pk) admin.site.register(Project, ProjectAdmin)
注意事项
- 确保你的详情视图URL配置正确,且当前Admin用户有权限访问该视图(通常Admin用户已满足权限要求)。
- 使用
next参数时,一定要通过is_safe_url验证,避免安全风险。
内容的提问来源于stack exchange,提问作者Andrew Plowright
相关产品推荐
相关产品推荐

