How to remove DELETE button from django admin page

Question:

I want to remove the Delete button from django admin page
as shown below.

enter image description here

Asked By: vinod sagar

||

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
Answered By: Iain Shelvington

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
Answered By: iamwaseem99

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)
Answered By: Kai – Kazuya Ito