删除Django admin中的默认删除操作

时间:2015-12-08 09:29:41

标签: python django django-admin

如何删除Django admin中的默认删除操作? 以下是否有效?

actions = [ ] 

6 个答案:

答案 0 :(得分:37)

这有效:

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

答案 1 :(得分:10)

在您的管理类中,定义has_delete_permission以返回False

class YourModelAdmin(admin.ModelAdmin):
    ...

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

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

答案 2 :(得分:7)

您可以在网站范围内停用“删除所选”操作:

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

如果需要包含此操作,请将'delete_selected'添加到操作列表中:

actions = ['delete_selected']

Documentation

答案 3 :(得分:6)

如果您要删除所有操作:

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

如果您想要一些特定的行动:

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

答案 4 :(得分:0)

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

例如,

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

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

答案 5 :(得分:0)

感谢@DawnTCherian、@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

它从列表视图中删除删除操作,从详细视图中删除删除选项。