我有一个模型:
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/ http://www.djangoproject.com/documentation/models/save_delete_hooks/这应该有效。
有任何想法吗?
我认为您可能正在使用管理员的批量删除功能,并且遇到了管理员的批量删除方法不调用的事实delete()
(参见相关ticket http://code.djangoproject.com/ticket/11022).
我过去通过编写用于删除模型的自定义管理操作来解决这个问题。
如果您没有使用管理员的批量删除方法(例如,您单击对象编辑页面上的删除按钮),则会发生其他情况。
请参阅警告here http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/:
“删除所选对象”操作
用途QuerySet.delete()
为了效率
原因,其中有一个重要的
警告:你的模型的delete()
方法
不会被调用。
如果您想覆盖此行为,
只需编写一个自定义操作即可
完成删除
首选方式 – 例如,通过
呼叫Model.delete()
对于每个
选定的项目。
有关批量删除的更多背景信息,
请参阅有关的文档目的
删除 http://docs.djangoproject.com/en/dev/topics/db/queries/#topics-db-queries-delete.
我的自定义管理模型如下所示:
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)