I want to remove the Delete button from django admin page
as shown below.
Asked
Active
Viewed 3,844 times
5
vinod sagar
- 95
- 2
- 7
-
Show the admin code for this. – sp1rs Jul 09 '19 at 03:22
-
Possible duplicate of [In Django Admin how do I disable the Delete link](https://stackoverflow.com/questions/4043843/in-django-admin-how-do-i-disable-the-delete-link) – RonanFelipe Jul 09 '19 at 03:26
2 Answers
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
-
1To 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