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

时间:2011-02-02 07:03:39

标签: python django django-models django-signals

添加或删除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 个答案:

答案 0 :(得分:5)

在保存或删除模型之前或之后(以及其他时候,如果需要),您应该使用Django的信号来调用特定函数。请在此处查看相关文档:http://docs.djangoproject.com/en/dev/topics/signals/

如果覆盖模型方法,则从查询集批量删除对象时不会调用delete()(请参阅here)。

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