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

如何阻止Django admin删除确认页显示所有待删除关联对象?

解决方案

核心思路是重写Django Admin的delete_selected默认action,替换默认的删除确认模板,跳过关联对象列表的渲染流程,具体操作如下:

步骤1:自定义快速删除action

在对应应用的admin.py文件中添加如下代码:

from django.contrib import admin
from django.contrib.admin.actions import delete_selected as default_delete_selected

def fast_delete_selected(modeladmin, request, queryset):
    # 临时替换确认页模板,执行后恢复原有配置避免影响其他模型
    original_template = modeladmin.delete_selected_confirmation_template
    modeladmin.delete_selected_confirmation_template = "admin/fast_delete_confirmation.html"
    try:
        return default_delete_selected(modeladmin, request, queryset)
    finally:
        modeladmin.delete_selected_confirmation_template = original_template

# 若需要全局替换所有模型的默认删除动作,打开下方两行注释即可
# admin.site.disable_action('delete_selected')
# admin.site.add_action(fast_delete_selected, 'delete_selected')

步骤2:创建简化版删除确认模板

在项目templates目录下新建admin/fast_delete_confirmation.html文件,内容如下:

{% extends "admin/base_site.html" %}
{% load i18n admin_urls %}

{% block content %}
<div class="module">
    <p>{% blocktrans count counter=queryset.count %}你确定要删除选中的 {{ counter }} 个 {{ opts.verbose_name }} 对象吗?{% plural %}你确定要删除选中的 {{ counter }} 个 {{ opts.verbose_name_plural }} 对象吗?{% endblocktrans %}</p>
    <p>* 所有关联的对象会被同步删除,该操作不可撤销</p>
    <form action="" method="post">{% csrf_token %}
        {% for obj in queryset %}
        <input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk }}">
        {% endfor %}
        <input type="hidden" name="action" value="delete_selected">
        <input type="hidden" name="post" value="yes">
        <div>
            <input type="submit" value="{% trans "是的,我确定" %}">
            <a href="{% url opts|admin_urlname:'changelist' %}" class="button cancel-link">{% trans "取消,返回列表" %}</a>
        </div>
    </form>
</div>
{% endblock %}

步骤3:绑定到指定模型(可选)

如果不需要全局生效,只想给特定大数量级的模型使用快速删除,直接在对应ModelAdmin中指定action即可:

@admin.register(你的大数量模型)
class YourModelAdmin(admin.ModelAdmin):
    actions = [fast_delete_selected]

适配Django 3.0.3的注意事项

  • 所有修改均为扩展实现,无需改动Django源码,完美兼容3.0.x版本
  • 原有删除权限校验、级联删除逻辑都会正常生效,不需要额外调整
  • 若需要保留少量风险提示,可直接在模板中添加精简文字,无需渲染完整关联对象列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:45:03