Django Admin列表页提交修改后无法重定向,已有方法无效
在Django Admin列表页使用list_editable后自定义提交跳转页面
当你在Django Admin的changelist视图中使用list_editable时,批量保存的逻辑是由changelist_view处理的,你之前尝试的response_change、response_post_save_change等方法只针对单个对象的编辑页面,所以不会生效。要实现列表页批量修改后的跳转,需要重写Admin类的changelist_view方法。
具体实现步骤
- 重写目标ModelAdmin的
changelist_view方法,先调用父类方法完成保存逻辑,再根据请求类型和保存结果修改跳转地址。 - 判断是否为POST提交的保存操作,确认保存成功后返回自定义重定向响应。
代码示例
from django.contrib import admin from django.shortcuts import redirect from django.contrib import messages from django.urls import reverse from .models import YourModel class YourModelAdmin(admin.ModelAdmin): list_display = ['name', 'editable_field1', 'editable_field2'] list_editable = ['editable_field1', 'editable_field2'] def changelist_view(self, request, extra_context=None): # 先让父类完成保存等核心逻辑 response = super().changelist_view(request, extra_context) # 判断是否是触发保存的POST请求 if request.method == 'POST' and '_save' in request.POST: # 检查是否有保存成功的提示消息(确保只有保存成功才跳转) success_messages = [msg for msg in messages.get_messages(request) if msg.level == messages.SUCCESS] if success_messages: # 跳转到指定页面,示例为其他模型的列表页 return redirect(reverse('admin:otherapp_othermodel_changelist')) return response
补充说明
- 如果不需要判断保存状态,直接在POST提交后跳转,可以去掉消息检查逻辑,直接返回重定向。
- 建议用
reverse生成跳转URL,避免硬编码,提升代码可维护性。
内容的提问来源于stack exchange,提问作者drec4s
相关产品推荐
相关产品推荐

