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

2024-10-01 05:05:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用信号在对象被删除后执行一个操作;然而,有时我想根据一个修改执行不同的不同的操作(不是默认操作)。在

有没有办法把一个论点传递给我的信号捕捉器?或者我将不得不放弃信号,而是硬编码我想在模型中做什么?在

我想做的是:

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

有什么好办法吗?在


Tags: 对象run模型default编码signal信号is
1条回答
网友
1楼 · 发布于 2024-10-01 05:05:48

我不认为你需要在模型中硬编码你的行为-你仍然可以使用信号。但是您需要重写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)
    ...

免责声明:不知道这是否是最好的方法。在

相关问题 更多 >