class UserAdmin(admin.ModelAdmin) 重写多删除的删除函数
class UserAdmin(admin.ModelAdmin) override delete function for multi-delete
我正在为 django 身份验证系统使用默认用户 class。
我已经覆盖了 UserAdmin class 上的 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)
删除所选内容是通过名为 delete_selected
的 Django 函数完成的
from django.contrib.admin.actions import delete_selected
有两种方法可以解决这个问题
禁用原始 delete_selected 并创建您自己的,您将添加到管理操作中
覆盖 UserModels queryset/manager delete() 方法
这将是 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)
我正在为 django 身份验证系统使用默认用户 class。
我已经覆盖了 UserAdmin class 上的 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)
删除所选内容是通过名为 delete_selected
的 Django 函数完成的from django.contrib.admin.actions import delete_selected
有两种方法可以解决这个问题
禁用原始 delete_selected 并创建您自己的,您将添加到管理操作中
覆盖 UserModels queryset/manager delete() 方法
这将是 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)