首页 > 解决方案 > Django:有没有办法取消接收器触发特定模型信号?

问题描述

post_save在我的领域中有一个模型的信号接收器。该接收器由许多在该模型上运行保存的例程触发(因此我还不能删除该接收器)。

@receiver(signal=post_save, sender=OrderGroup)
def check_commission_should_be_synced(sender, instance, created, **kwargs):
    # Receiver procedure
    # ...

我想取消对操纵我的模型的特定方法的触发。那可能吗?

我正在Django 1.7使用Python 2.7.

标签: pythondjangodjango-modelsdjango-signals

解决方案


将非数据库布尔属性添加到默认为 False 的模型中,例如:

class MyModel(models.Model):
    # existing datanase fields
    trigger_post_save = False

对于不想触发 post_save 的方法,请在保存前将其设置为 True:

my_instance.trigger_post_save = True
my_instance.save()

最后,在您的装饰方法中检查值并在设置时返回:

@receiver(signal=post_save, sender=OrderGroup)
def check_commission_should_be_synced(sender, instance, created, **kwargs):
    if instance.trigger_post_save:
        return
    # the rest of code

推荐阅读