首页 > 解决方案 > 如何处理 Django Admin 的大量删除?

问题描述

我正在使用 Django 2.2.10。

我有一个模型叫做Site,还有一个模型叫做Record。每条记录都与一个站点(外键)相关联。

在我的应用程序运行几天/几周/几个月后,每个站点都可以有数千条与之关联的记录。我有效地使用数据库,所以这通常不是问题。

然而,在 Django Admin 中,当我尝试删除一个站点时,Django Admin 会尝试找出每个也将被删除的关联对象,并且因为我的 ForeignKey 使用on_delete=models.CASCADE了我想要的,它会尝试生成一个列出数千个的页面,可能有数百万条记录将被删除。有时这会成功,但需要几秒钟。有时浏览器只是放弃等待。

我怎样才能让 Django Admin 不列出record它打算删除的每一个?也许只是说“将删除 x 条记录”之类的话。

更新:我应该覆盖 Django 管理员的 delete_confirmation.html 吗?看起来罪魁祸首可能是这一行:

<ul>{{ deleted_objects|unordered_list }}</ul>

或者是否有一个选项可以启用自动不列出要删除的每个对象,也许如果对象计数超过 X 个对象?

更新 2:从 delete_confirmation.html 中删除上述行没有帮助。我认为生成deleted_objects 变量的视图花费了太长时间。不太确定如何覆盖 Django Admin 视图

标签: pythondjango

解决方案


将此添加到您的管理类中,然后您可以使用此操作删除而不会发出警告

  actions = ["silent_delete"]

  def silent_delete(self, request, queryset):
    queryset.delete()

如果您想隐藏默认删除操作,请将其添加到您的管理类

  def get_actions(self, request):
    actions = super().get_actions(request)
    if 'delete_selected' in actions:
      del actions['delete_selected']
    return actions

推荐阅读