Django admin-отключить удаление пользователя

у меня есть приложение django, в котором я хочу отключить удаление пользователя в admin. Я попытался отключить действия и установить разрешение delete на false. Но ни одна из них не сработала.

from django.contrib.auth.models import User

class UserProfileAdmin(UserAdmin):
    actions = None

или

    def has_delete_permission(self, request):
        return False

или

    def get_actions(self, request):
        actions = super(UserProfileAdmin, self).get_actions(request)
        if 'delete_selected' in actions:
            del actions['delete_selected']
        return actions

admin.site.unregister(User)
admin.site.register(User, UserProfileAdmin)

но когда я использую UserAdmin для добавления встроенной информации о пользователе, он работает нормально. Поэтому, пожалуйста, предложите мне способ отключить удаление пользователя в Django admin. Спасибо заранее.

2 ответов


переопределение ModelAdmin.has_delete_permission должен сделать трюк, ваша вызывающая подпись неверна, в ней отсутствует obj параметр

class UserProfileAdmin(UserAdmin):
    def has_delete_permission(self, request, obj=None): # note the obj=None
        return False

кроме того, просто return False запрещает всем сотрудникам, включая администратора, удалять элементы в Администраторе Django, вы можете просто настроить User/Group разрешения для предотвращения этих сотрудников вы не хотите, чтобы они удалить User(), сняв их delete_userprofile и delete_user разрешения.


Если ваша цель состоит в том, чтобы навсегда удалить кнопку "Удалить" из нижней части всех форм изменения администратора, вы можете сделать это, изменив файл .../django/contrib/admin/templatetags/admin_modify.py.

в частности, заменить строки:

    'show_delete_link': (not is_popup and context['has_delete_permission']
                          and (change or context['show_delete'])),

С:

    'show_delete_link': False,

и никакие формы изменения администратора не должны показывать кнопку удаления в левом нижнем углу.