当前位置: 首页 > 面试题库 >

Django模型:delete()未触发

宇文嘉勋
2023-03-14
问题内容

我有一个模型:

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

save()-方法被触发,但delete()没有被触发。


问题答案:

我认为你可能正在使用管理员的批量删除功能,并且遇到了管理员的批量删除方法未调用的事实delete()

我过去通过编写用于删除模型的自定义admin操作来解决此问题。

如果你没有使用管理员的批量删除方法(例如,你单击对象的编辑页面上的删除按钮),则说明正在进行其他操作。

请在此处查看警告:

QuerySet.delete()出于效率考虑,使用“删除选定对象”操作有一个重要的警告:delete()不会调用模型的方法。

如果你想覆盖此行为,只需编写一个自定义操作即可以你喜欢的方式完成删除操作,例如,通过调用Model.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)


 类似资料:
  • 主要内容:,创建模型,操作数据(CRUD),其他数据操作,,链接模型模型是表示我们的数据库表或集合类,并且其中所述类的每个属性是表或集合的字段。模型是在 app/models.py 中定义(在我们的例子中是:myapp/models.py) 创建模型 下面是创建一个 Dreamreal 模型实例 − 每一个模型继承自django.db.models.Model。 我们类有4个属性(3 CharField和1个整数),这将是表中的字段。 Meta类与db_table

  • 我们现在将要创建的是一个能存储我们博客所有文章的东西。为了达到这个目的,我们将要讲解一下一个被称为objects(对象)的东西. 对象 在编程中有一个概念叫做 面向对象编程 。 它的思想是,与其用无聊的一连串的程序指令方式写程序,我们不如为事物建立模型,然后定义他们是怎样互相交互的。 那什幺是对象呢?它是一个属性和操作的集合。它听起来很奇怪,但我们会给你一个例子。 如果我们想塑造一只猫的模型,我们

  • Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。 Django 为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。 MySQL 是 Web 应用中最常用的数据库。本章节我们将以 Mysql 作为实例进行介绍。你可以通过本站的 MySQL 教程 了解更多Mysql的基础知识。 如果你没安装 mysql 驱动

  • 问题内容: 我机智的结束了。经过十多个小时的故障排除(可能还有更多),我认为自己终于可以从事业务了,但是后来我得到了: 网络上对此信息很少,目前还没有解决方案解决了我的问题。任何建议将不胜感激。 我正在使用Python 3.4和Django 1.10。 从我的settings.py: 我的apps.py文件如下所示: 和 问题答案: 你是否缺少将应用程序名称放入设置文件中的信息?这是.manage

  • 问题内容: 我知道没有一个模式,你只能用它的形式。 今天,当我分析与多项选择相关的新项目时遇到一个问题。 我希望有一个具有的字段可以选择多项。 我通过创建a来解决此问题,并用a形式管理多个选择,并存储用逗号分隔的选择。 在这个项目中,由于配置,我不能这样做,因为我上面提到的,我需要做的是在型号,我宁愿不来编辑Django管理形式 既不使用形式。我需要具有多个选择选项的“模型字段” 有人通过模型解决

  • 问题内容: 这是Windows系统上的追溯。 我的manage.py看起来像这样: 当我尝试在Django 1.7中使用注册应用程序时出现此错误 问题答案: 这就是为我们和这些人解决的问题: 我们的项目从Django 1.4开始,然后转到1.5,然后到1.7。我们的wsgi.py看起来像这样: 当我更新到1.7样式的WSGI处理程序时: 现在一切正常。