2012-09-18 269 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

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

相關問題