删除 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 文档推荐的方法:
如果要删除所有操作:
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']
如果您正在使用该模型,作为其他模型中的外键。
然后通过对该外键使用 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']
...
如何去除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 文档推荐的方法:
如果要删除所有操作:
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']
如果您正在使用该模型,作为其他模型中的外键。
然后通过对该外键使用 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']
...