2012-09-18 271 views
5

我有一个Django的应用程序,我想在管理中禁用用户删除。我试图禁用操作并将删除权限设置为false。但他们都没有工作。Django的管理员 - 禁用用户删除

from django.contrib.auth.models import User 

class UserProfileAdmin(UserAdmin): 
    actions = None 

OR

def has_delete_permission(self, request): 
     return False 

OR

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中禁用用户删除的方法。提前致谢。

+1

你正在重写'has_add_permission'来禁用删除?此外,更好地禁用全局删除操作,并明确将其添加到所需的任何地方 – okm

+0

对不起。它实际上是'has_delete_permission'。我在这里犯了一个错误。关于禁用删除操作,整个网站是一个好主意。但是当我们打开一个用户条目时,在提交行(保存按钮行)中会有一个删除选项。如何禁用它? – arulmr

回答

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管理项目管理员,您可能希望只需调整User/Group权限即可阻止那些不希望他们删除User()的员工,方法是删除他们的delete_userprofiledelete_user权限。

+0

我想禁用超级用户本身的删除权限。 'has_delete_permission'也没有任何效果。 – arulmr

+0

@arulmr这很奇怪,你有没有正确注册UserProfileAdmin,并且没有覆盖管理员模板?试着把一个'import pdb;在'return'子句之前的'has_delete_permission()'中的pdb.set_trace()',以确保它被调用。 – okm

+0

我给我下面的代码:从django.contrib.auth.models '导入用户 从django.contrib.auth.admin进口UserAdmin 类UserProfileAdmin(UserAdmin): 高清has_delete_permission(个体经营,要求,OBJ =无): import pdb; pdb.set_trace(); return False admin.site.unregister(User) admin.site。注册(User,UserProfileAdmin)' 但是** pdb **未被调用。这里有什么错误?我认为代码格式在这个评论中不会很好。提前致谢。 – arulmr

-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, 

,并没有管理的变化形式应显示在左下角的删除按钮。

+2

编辑django源文件会影响所有其他应用程序。但我只想在当前的应用程序中实现这一点。 – arulmr

+0

是啊,如果你想升级你的Django呢? –

+0

好点。希望我的答案已被打死。 –

相关问题