5

I want to remove the Delete button from django admin page as shown below.enter image description here

vinod sagar
  • 95
  • 2
  • 7

2 Answers2

9

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()
Iain Shelvington
  • 26,159
  • 1
  • 24
  • 40
  • 2
    `def has_delete_permission(self, request, obj=None): return False` worked – macieksk Nov 27 '20 at 09:54
  • 1
    To clarify; this does **not** *hide* or *remove* the delete button. This makes the user not able to delete the object. This can be a problem for objects that are suppose to be implicitly deleted due to deleting a related object when having `on_delete=CASCADE`. – Ted Klein Bergman Dec 22 '20 at 15:48
1

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
devwaseem
  • 13
  • 1
  • 5