10

我有一个 django 应用程序,我想在管理员中禁用用户删除。我试图禁用操作并将删除权限设置为 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 中禁用用户删除的方法。提前致谢。

4

2 回答 2

20

覆盖ModelAdmin.has_delete_permission应该可以解决问题,您的调用签名不正确,它缺少obj参数

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

Furthermore, simply return False prevents all staffs including administrator from deleting items in the Django Admin, you may want to just tweak User/Group permissions to prevent those staff you don't want them to delete an User(), by removing their delete_userprofile and delete_user permissions.

于 2012-09-18T15:31:05.323 回答
-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,

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

于 2012-09-18T14:40:44.793 回答