我有个模特:

class MyModel(models.Model):
 ...
    def save(self):
        print "saving"
        ...
    def delete(self):
        print "deleting"
        ...

会触发save()-方法,但不会触发delete().我使用最新的svn版本(Django版本1.2 pre alpha svn-11593),关于http://www.djangoproject.com/documentation/models/save_delete_hooks/的文档,这应该可以.

推荐答案

我认为您可能正在使用管理员的批量删除功能,并且遇到管理员的批量删除方法不调用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)

Django相关问答推荐

Django 根据子级过滤父级

如何在没有此前缀的情况下修复此 django 路径?

Django - 使用在 URL 中传递的父类主键从子类中过滤对象

Django `UniqueConstraint` 异常处理方式与 'unique=True' 相同

Django中的多对多关系?

Django:无法从另一个应用程序导入模型

try 编辑/创建时,特定模型的 Django 管理员挂起(直到超时错误)

Django SMTPAuthenticationError

如何测试某个日志(log)消息是否记录在 Django 测试用例中?

通过 django shell 保存图像/文件

在 django web 应用程序中,如何给用户自己的子域?

目前使用 Django Evolution,South是否更好,值得切换?

Django 有 SmallIntegerField 的原因是什么?

在 Django 中使用邮箱地址或用户名登录用户

如何从 Django 的 TabularInline 管理视图中省略对象名称?

使用 Django 部署 Google Analytics

如何过滤(或替换)在 UTF-8 中占用超过 3 个字节的 unicode 字符?

django-getlist()

Django Debug Toolbar:了解时间面板( time panel)

在 Django 中使用 select_related Select 特定字段