我有一个模型:
class MyModel(models.Model):
...
def save(self):
print "saving"
...
def delete(self):
print "deleting"
...
save() 方法被触发,但 delete() 没有。我使用最新的 svn-Version(Django 版本 1.2 pre-alpha SVN-11593),以及关于 http://www.djangoproject.com/documentation/models/save_delete_hooks/ 的文档这应该工作。 有什么想法吗?
最佳答案
我认为您可能正在使用管理员的批量删除功能,并且正在运行管理员的批量删除方法不调用 delete()
的事实(参见相关的 ticket ) .
我过去通过编写用于删除模型的自定义管理操作来解决这个问题。
如果您没有使用管理员的批量删除方法(例如,您正在单击对象编辑页面上的删除按钮),那么其他事情正在发生。
查看警告 here :
The “delete selected objects” action uses
QuerySet.delete()
for efficiency reasons, which has an important caveat: your model’sdelete()
method will not be called.If you wish to override this behavior, simply write a custom action which accomplishes deletion in your preferred manner – for example, by calling
Model.delete()
for each of the selected items.For more background on bulk deletion, see the documentation on 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)
关于Django 模型 : delete() not triggered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1471909/