Django:有没有办法取消对特定模型信号的接收器触发?

Django: Is there a way to cancel an receiver triggering for a particular model signal?

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

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

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

我正在使用 Django 1.7Python 2.7

向您的模型添加一个默认为 False 的非数据库布尔属性,例如:

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

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

my_instance.trigger_post_save = True
my_instance.save()

最后,在您的修饰方法中检查值,return 如果已设置:

@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