如何处理 Django Admin 中的大量删除?

Joh*_*ohn 6 python django

我正在使用 Django 2.2.10。

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

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

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

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

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

<ul>{{ deleted_objects|unordered_list }}</ul>
Run Code Online (Sandbox Code Playgroud)

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

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

weA*_*ust 6

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

  actions = ["silent_delete"]

  def silent_delete(self, request, queryset):
    queryset.delete()
Run Code Online (Sandbox Code Playgroud)

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

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