2009-10-29 28 views
3

我正在使用信號在對象被刪除後執行操作;然而,有時我想執行一個不同的操作(不是默認的操作),具體取決於操作。傳遞pre_delete()或post_delete()信號參數?

有沒有辦法將參數傳遞給我的信號捕捉器?或者我將不得不放棄信號,而是硬編碼我想在模型中做什麼?

我想什麼做的是這樣的:

>>> MyModelInstance.delete() 
    # default pre_delete() signal is run, in this case, an email is sent 
>>> MyModelInstance.delete(send_email=False) 
    # same signal is run, however, no email gets sent 

上最好的辦法的任何想法?

回答

4

我不認爲你需要在模型中硬編碼你的動作 - 你仍然可以使用信號。但是你需要重寫delete()以至少接受send_email參數,因爲我不認爲你可以傳入額外的參數到post_delete()中 - 觸發你自己的自定義信號。

事情是這樣的:(從內存寫入,未經測試!!!

import django.dispatch 
your_signal = django.dispatch.Signal(providing_args=["send_email",]) 

def your_callback(sender, **kwargs): 
    print send_email 

your_signal.connect(your_callback) 

class YourModel(models.Model): 
    ... 
    def delete(self, send_email=True): 
     super(YourModel, self).delete() 
     your_signal.send(sender=self, send_email=send_email) 
    ... 

免責聲明:不知道這是否是最好的辦法。

+0

我能夠使用這種方法 - 不知道它是否是最好的,但它對我來說很有效!謝謝。 – thornomad 2009-10-30 14:57:41