How to remove DELETE button from django admin page
Question:
Answers:
In your ModelAdmin definition you can override the function has_delete_permission
. If you wish to remove the delete button for all users you can just return False
def has_delete_permission(self, request, obj=None):
return False
I would suggest however that you allow superusers to still be able to delete
def has_delete_permission(self, request, obj=None):
return request.user.is_superuser
You can override the function has_delete_permission
to prevent deletion
def has_delete_permission(self, request, obj=None):
return False
Overriding has_delete_permission
will prevent deletion in other model pages which have relation (with on_delete=models.CASCADE
) to your model. To allow deletion in other pages but prevent the deletion in the model’s admin page, You can conditionally return False
like:
def has_delete_permission(self, request, obj=None):
if f"{model._meta.app_label}/{model._meta.model_name}" in request.path:
return False
return True
To remove "Delete" button, set "False" to "extra_context[‘show_delete’]" in "changeform_view()" as shown below:
# "admin.py"
from django.contrib import admin
from .models import MyModel
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
extra_context = extra_context or {}
extra_context['show_delete'] = False # Here
# extra_context['show_save'] = False
# extra_context['show_save_and_continue'] = False
return super().changeform_view(request, object_id, form_url, extra_context)
You can also remove "Delete" button by setting "False" to "show_delete" in "context.update()" in "render_change_form()" as shown below:
# "admin.py"
from django.contrib import admin
from .models import MyModel
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
context.update({
'show_delete': False, # Here
# 'show_save': False,
# 'show_save_and_continue': False,
})
return super().render_change_form(request, context, add, change, form_url, obj)
In your ModelAdmin definition you can override the function has_delete_permission
. If you wish to remove the delete button for all users you can just return False
def has_delete_permission(self, request, obj=None):
return False
I would suggest however that you allow superusers to still be able to delete
def has_delete_permission(self, request, obj=None):
return request.user.is_superuser
You can override the function has_delete_permission
to prevent deletion
def has_delete_permission(self, request, obj=None):
return False
Overriding has_delete_permission
will prevent deletion in other model pages which have relation (with on_delete=models.CASCADE
) to your model. To allow deletion in other pages but prevent the deletion in the model’s admin page, You can conditionally return False
like:
def has_delete_permission(self, request, obj=None):
if f"{model._meta.app_label}/{model._meta.model_name}" in request.path:
return False
return True
To remove "Delete" button, set "False" to "extra_context[‘show_delete’]" in "changeform_view()" as shown below:
# "admin.py"
from django.contrib import admin
from .models import MyModel
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
extra_context = extra_context or {}
extra_context['show_delete'] = False # Here
# extra_context['show_save'] = False
# extra_context['show_save_and_continue'] = False
return super().changeform_view(request, object_id, form_url, extra_context)
You can also remove "Delete" button by setting "False" to "show_delete" in "context.update()" in "render_change_form()" as shown below:
# "admin.py"
from django.contrib import admin
from .models import MyModel
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
context.update({
'show_delete': False, # Here
# 'show_save': False,
# 'show_save_and_continue': False,
})
return super().render_change_form(request, context, add, change, form_url, obj)