删除 Django 管理中的默认删除操作

Remove the default delete action in Django admin

如何去除Django admin中的默认删除操作? 以下是否可行?

actions = [ ] 

在您的管理员 class 中,将 has_delete_permission 定义为 return False:

class YourModelAdmin(admin.ModelAdmin):
    ...

    def has_delete_permission(self, request, obj=None):
        return False

然后,它不会显示删除按钮,并且不允许您在管理界面中删除对象。

这个有效:

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

这也是根据以下 Django 文档推荐的方法:

Conditionally enabling or disabling actions

如果要删除所有操作:

class UserAdmin(admin.ModelAdmin):
    model = User
    actions = None

如果你想要一些具体的行动:

class UserAdmin(admin.ModelAdmin):
    model = User
    actions = ['name_of_action_you_want_to_keep']

您可以禁用 "delete selected" 操作 site-wide:

from django.contrib.admin import site
site.disable_action('delete_selected')

当您需要包含此操作时,将'delete_selected'添加到操作列表中:

actions = ['delete_selected']

Documentation

如果您正在使用该模型,作为其他模型中的外键。 然后通过对该外键使用 PROTECT 约束,您可以在 Django 管理中禁用该模型的删除。

例如,

class Exam(models.Model):
    student = models.ForeignKey(User, on_delete=models.PROTECT)
    marks = models.IntegerField(default=0)

通过 Exam 模型中存在的外键向 User 模型添加 PROTECT 约束,我禁用了(在 Django admin 或其他地方)删除的权力参加笔试的学生(User)

归功于@DawnTCerian、@tschale 和@falsetru

我用过:

class YourModelAdmin(admin.ModelAdmin):
...
  def get_actions(self, request):
      actions = super(YourModelAdmin, self).get_actions(request)
      try:
          del actions['delete_selected']
      except KeyError:
        pass
      return actions

  def has_delete_permission(self, request, obj=None):
      return False

它删除了列表视图中的删除操作和详细信息视图中的删除选项。

您可以全局禁用批量删除操作并仅为选定的模型启用。

文档来自 django website

# Globally disable delete selected
admin.site.disable_action('delete_selected')

# This ModelAdmin will not have delete_selected available
class SomeModelAdmin(admin.ModelAdmin):
    actions = ['some_other_action']
    ...

# This one will
class AnotherModelAdmin(admin.ModelAdmin):
    actions = ['delete_selected', 'a_third_action']
    ...