我认为您可能正在使用管理员的批量删除功能,并且遇到管理员的批量删除方法不调用delete()
的事实(请参阅相关的ticket).
过go ,我通过编写用于删除模型的自定义管理操作来绕过这一问题.
如果您没有使用管理员的批量删除方法(例如,您正在单击对象编辑页面上的删除按钮),则发生了其他事情.
请参见警告here:
"Delete Selected Objects"(删除选定对象)操作
使用QuerySet.delete()
提高效率
原因,这有一个重要的
警告:您的模型的delete()
方法
不会被召唤.
如果您希望覆盖此行为,
只需编写一个自定义操作,该操作
在您的
首选方式-例如,通过
for each 人拨打Model.delete()
所选项目.
有关批量删除的更多背景信息,请参阅
请参阅关于object
deletion的文档.
我的自定义管理员模型如下所示:
from photoblog.models import PhotoBlogEntry
from django.contrib import admin
class PhotoBlogEntryAdmin(admin.ModelAdmin):
actions=['really_delete_selected']
def get_actions(self, request):
actions = super(PhotoBlogEntryAdmin, self).get_actions(request)
del actions['delete_selected']
return actions
def really_delete_selected(self, request, queryset):
for obj in queryset:
obj.delete()
if queryset.count() == 1:
message_bit = "1 photoblog entry was"
else:
message_bit = "%s photoblog entries were" % queryset.count()
self.message_user(request, "%s successfully deleted." % message_bit)
really_delete_selected.short_description = "Delete selected entries"
admin.site.register(PhotoBlogEntry, PhotoBlogEntryAdmin)