【问题标题】:Django: Is there a way to cancel an receiver triggering for a particular model signal?Django:有没有办法取消接收器触发特定模型信号?
【发布时间】:2020-01-14 16:58:26
【问题描述】:

我的域中有一个模型的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

【问题讨论】:

  • 你能告诉我们你提到的模型、信号和方法吗?
  • 嘿@CalebGoodman 我更新了添加接收器的代码。但我认为没有必要添加其余代码,因为我的帖子是关于 Django 功能的一般问题。

标签: python django django-models django-signals


【解决方案1】:

为您的模型添加一个非数据库布尔属性,默认为 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

【讨论】:

  • 好主意!我会这样做,但默认情况下我会将标志设置为 True,因此我不必重构保存模型实例的所有位置。谢谢!
猜你喜欢
  • 2021-03-13
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 2012-03-02
相关资源
最近更新 更多