Django 管理员与模型删除

2 投票
1 回答
904 浏览
提问于 2025-04-15 11:42

我有一堆类,它们都是从一个共同的基类继承而来的。这个共同的基类在它的 delete 方法里做了一些清理工作。

class Base(models.Model):
    def delete(self):
        print "foo"

class Child(Base):
    def delete(self):
        print "bar"
        super(Child, self).delete()

当我在命令行中对子类调用 delete 时,我得到了:

bar
foo

这正是我预期的结果

但是当我使用管理员权限时,自定义的删除函数似乎没有被调用。我是不是漏掉了什么明显的东西?

谢谢,

Dom

附言:这显然是我使用的代码的简化版本,如果里面有错别字请见谅。欢迎留言,我会进行修正。

1 个回答

9

根据这个文档中的错误报告(说明管理员的批量删除不调用模型的delete()函数),管理员的批量删除功能实际上并不会调用模型的删除函数。如果你在管理员界面使用批量删除,这可能就是你遇到问题的原因。

在这个问题的补充文档中,建议你自己写一个批量删除的函数,这个函数会调用模型的删除函数。

关于这种行为的更多信息可以在这里找到。批量删除操作为了提高效率,并不会调用模型的delete()方法。

撰写回答