传递pre_delete()或post_delete()信号参数?

时间:2009-10-29 12:21:32

标签: python django

我正在使用信号在删除对象后执行操作;但是,有时我想根据一个句子执行不同的动作(不是默认动作)。

有没有办法将参数传递给我的信号捕手?或者我是否必须放弃信号,而是硬编码我想在模型中做什么?

我想做的是这样的事情:

>>> 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

关于最佳方法的任何想法?

1 个答案:

答案 0 :(得分: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)
    ...

免责声明:不知道这是否是最佳方法。

相关问题