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



如何删除Django管理中的默认删除操作?以下方法可行吗?

actions = [ ] 

这是有效的:

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

这也是基于Django以下文档的推荐方法:

有条件地启用或禁用操作

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

class YourModelAdmin(admin.ModelAdmin):
    ...
    def has_delete_permission(self, request, obj=None):
        return False

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

您可以在站点范围内禁用"删除选定的"操作:

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

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

actions = ['delete_selected']

文档

如果您想删除所有操作:

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

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

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

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

django网站的文档

# 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']
    ...

向@DawnCherian、@tscale和@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

它将从列表视图中删除删除操作,并从局部视图中删除选项。

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

例如,

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

通过Exam模型中存在的外键将PROTECT约束添加到User模型中,我禁用了(在Django admin或其他地方)删除已笔试的学生(User)的功能。

最新更新