Django 模型 : delete() not triggered

标签 django django-models

我有一个模型:

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’s delete() 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/

相关文章:

django - 无法在 django-ckeditor 中配置 youtube 插件

python - 关于Django RadioSelect初始值

database - 如何在 Django 中进行版本控制?

python - 在 django slug 字段中使用外语不起作用

python - 如何使用 models.FileField 将文件保存在数据库中而不是上传到服务器媒体文件夹中?

python - 区分 Django views.py 中同一页面上的不同发布请求

Django Rest Framework 奇怪错误无法导入名称 SkipError

django - 将上传的 csv 文件读取到 pandas 数据框中

django - 如何在 Django 中将组与 AbstractBaseUser 集成?

python - 保存模型后调用函数