如何检测Django模型对象的添加/删除?

2 投票
1 回答
4499 浏览
提问于 2025-04-16 11:04

当我添加或删除Foo类型的对象时,我需要做同样的计算。有什么办法可以检测到Foo模型对象的添加或删除吗?比如:

from django.db import models

class Foo(models.Model):
    ...
    def save(self):
        #do some processing

    def delete(self):
        #do some processing

我能否避免在这两个方法中重复写代码?

使用信号,你可以这样实现:

from django.db import models 
from django.db.models.signals import post_save, post_delete

class Foo(models.Model):
    ...
    ...

def foo_handler(sender, **kwargs):    
    #do some processing 

post_save.connect(foo_handler, sender=Foo)
post_delete.connect(foo_handler, sender=Foo)    

1 个回答

5

你可以使用Django的信号功能,在保存或删除模型之前或之后调用特定的函数(如果需要的话,也可以在其他时候调用)。你可以在这里查看相关的文档:http://docs.djangoproject.com/en/dev/topics/signals/

如果你重写了模型的方法,当你从查询集中批量删除对象时,你的delete()方法不会被调用(具体可以查看这里)。

你可以使用signal.connect将多个信号连接到同一个方法上。

撰写回答