Python 类UserAdmin(admin.ModelAdmin)重写多重删除的删除函数

Python 类UserAdmin(admin.ModelAdmin)重写多重删除的删除函数,python,django,admin,Python,Django,Admin,我正在使用django身份验证系统的默认用户类 我已经覆盖了UserAdmin类上的delete_model函数,如下所示,以便在删除我的用户时执行一些操作。当我在管理员页面上找到用户,然后单击删除按钮时,它工作正常。我的问题是,当我在UserAdmin页面上选择一个或多个用户时,看起来这不是调用的delete_model函数。我该怎么做才能修好它 from django.contrib import admin #create a custom model admin which allow

我正在使用django身份验证系统的默认用户类

我已经覆盖了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)

删除所选内容由名为“删除所选内容”的Django函数完成

from django.contrib.admin.actions import delete_selected
有两种方法可以解决此问题

  • 禁用所选的原始删除并创建自己的,您将添加到管理操作中

  • 重写UserModels queryset/manager delete()方法


  • 这将是IKLANC描述的解决方案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)
    

    确切地说,选项2将覆盖UserModels queryset/manager
    delete()
    方法。但这需要使用自定义用户模型。您应该使用django提供的
    UserAdmin
    ,而不仅仅是普通的
    ModelAdmin
    作为基类,否则您将丢失所有其他特定于UserAdmin的功能。