2017-02-03 42 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