2011-02-02 61 views
2

當添加或刪除Foo類型的對象時,我需要執行相同的計算。如何檢測Foo模型的對象的添加/刪除?例如:如何檢測Django模型的對象何時添加/刪除?

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)  
+0

號爲什麼?沒有重複。太棒了。而且非常簡單。每個人都期待什麼。你不喜歡它什麼? – 2011-02-02 11:04:50

回答

6

你應該使用Django的信號之前或之後的模型被保存或刪除(以及在其他時間,如果需要的話)來調用特定的功能。點擊這裏,查看相關文件:http://docs.djangoproject.com/en/dev/topics/signals/

如果覆蓋模型方法,您從一個QuerySet批量刪除對象時delete()將不會被調用(見here)。

您可以使用signal.connect將多個信號連接到相同的方法。

+0

好處是,管理員的批量方法通常只發出一個查詢,而不是發出信號。 – 2011-02-02 09:52:15