Django admin - 禁用用户删除

时间:2012-09-18 11:11:35

标签: django django-admin

我有一个django应用,我想在admin中禁用用户删除。我试图禁用操作并将删除权限设置为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 个答案:

答案 0 :(得分:16)

覆盖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 Admin中的项目,您可能只想调整User/Group权限,以防止那些您不希望他们删除User()的人员{1}},删除了他们的delete_userprofiledelete_user权限。

答案 1 :(得分:-2)

如果您的目标是永久删除所有管理员更改表单底部的“删除”按钮,则可以通过修改文件.../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,

并且没有管理员更改表单应显示左下角的“删除”按钮。