2017-02-03 41 views
1

我正在使用django身份驗證系統的默認用戶類。class UserAdmin(admin.ModelAdmin)重寫刪除多重刪除功能

我已經覆蓋了UserAdmin類的delete_model函數,如下所示,以刪除我的用戶時執行一些內容。當我轉到管理頁面上的用戶時,它工作正常,然後單擊刪除按鈕。我的問題是,當我在UserAdmin頁面上選擇一個或多個用戶時,看起來這不是所調用的delete_model函數。我該怎麼做才能解決它?

from django.contrib import admin 

#create a custom model admin which allow to search on the email field 
class UserAdmin(admin.ModelAdmin): 

    #override the delete method to unset the send email to the deleted_user 
    def delete_model(UserAdmin, request, obj): 

     #### do something #### 

     obj.delete() 

#unregister the basic User, and register the new User ModelAdmin 
admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 
+2

你應該從Django中,而不是隻是一個普通的'的ModelAdmin使用'UserAdmin' '作爲基類,否則你將失去所有其他UserAdmin特定的功能。 – trixn

回答

0

這將是iklinac描述的解決方案1:

from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin 
from django.contrib.admin.actions import delete_selected as django_delete_selected 


class UserAdmin(DjangoUserAdmin): 
    actions = ['delete_selected'] 

    def delete_model(modeladmin, request, obj): 
     # do something with the user instance 

     obj.delete() 

    def delete_selected(modeladmin, request, queryset): 
     # do something with the users in the queryset 

     return django_delete_selected(modeladmin, request, queryset) 
    delete_selected.short_description = django_delete_selected.short_description 

admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 
0

刪除選定由Django的函數來完成所謂的delete_selected

from django.contrib.admin.actions import delete_selected 

有解決這一

  1. 禁用原delete_selected並創建自己的,你加2點的方法up into admin actions

  2. 覆蓋UserModels查詢集/管理器中刪除()方法

+1

確切地說,選項2將覆蓋UserModels queryset/manager'delete()'方法。但是這將涉及使用自定義用戶模型。 – trixn

+0

感謝注意:)更新 – iklinac