Home » Django » In Django Admin how do I disable the Delete link

In Django Admin how do I disable the Delete link

Posted by: admin November 30, 2017 Leave a comment

Questions:

I’ve managed to disable the “Delete selected” action. Easy.

But a user can still click on an item and then there’s the red Delete link at the bottom.

Answers:

Simple 🙂

class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
    # Other stuff here
    def has_delete_permission(self, request, obj=None):
        return False

Questions:
Answers:

If you want to disable an specific one that isn’t custom do this. In django 1.6.6 I had to extend get_actions plus define has_delete_permission. The has_delete_permission solution does not get rid of the action from the dropdown for me:

class MyModelAdmin(admin.ModelAdmin):

    ....

    def get_actions(self, request):
        #Disable delete
        actions = super(MyModelAdmin, self).get_actions(request)
        del actions['delete_selected']
        return actions

    def has_delete_permission(self, request, obj=None):
        #Disable delete
        return False

Not including it in actions = ['your_custom_action'], only works for the custom actions (defs) you have defined for that model. The solution AdminSite.disable_action('delete_selected'), disables it for all models, so you would have to explicitly include them later per each modelAdmin

Questions:
Answers:

Simply disable the yourapp.delete_yourmodel permission for that user or the group to which (s)he belongs.

Questions:
Answers:

Well you probably are using:

AdminSite.disable_action('delete_selected')

For further control just implement your own admin and set its actions to whatever you need:

class MyModelAdmin(admin.ModelAdmin):
    actions = ['whatever', 'actions']

Reference: http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action

Questions:
Answers:

admin.site.disable_action('delete_selected')

From the docs