django admin 覆盖delete_model 不适用于批量删除

Ami*_*udi 0 python django django-admin

我想禁用特定模型实例的删除

我重写delete_model如下ModelAdmin

def delete_model(self, request, client):
    if client.schema_name == 'public':
        messages.set_level(request, messages.ERROR)
        messages.error(request, 'Suppression interdite pour la racine')
    else:
        super().delete_model(request, client)
Run Code Online (Sandbox Code Playgroud)

当我单击更改视图上的删除按钮时它起作用

在此输入图像描述在此输入图像描述

但不能使用批量删除,因为实例被删除而不会阻止

在此输入图像描述

我怎样才能解决这个问题 ?我还意识到这delete_model不是通过批量删除来调用的,这有点奇怪。

ikl*_*nac 6

由于批量删除管理操作文档已经警告您

\n
\n

\xe2\x80\x9cdelete 选定的对象\xe2\x80\x9d 操作出于效率原因使用 QuerySet.delete(),这有一个重要的警告:您的 model\xe2\x80\x99s\ndelete() 方法将不会被调用。

\n

如果您希望覆盖此行为,您可以覆盖\nModelAdmin.delete_queryset() 或编写一个自定义操作,以您喜欢的方式进行删除\xe2\x80\x93 例如,通过为每个\n调用 Model.delete()所选项目。

\n

有关批量删除的更多背景信息,请参阅有关对象删除的文档。

\n
\n