Django 信号卡在循环中

Django Signal stuck in loop

我有 3 个信号函数,其中一个在调用时陷入循环。当模型 class 中的对象在 Django 管理页面上更新时调用它...

# models.py
class Item(models.Model):
    ...
    foo = models.BooleanField(
        default=False,
        editable=True,
        blank=True,
        help_text='Blah Blah...'    
    )
# signals.py
@receiver(pre_save, sender=Item)
def foobar(sender, instance, **kwargs):
    try:
        pass
    except:
        pass

我从字面上将 pass 放入每个 tryexcept 中,并调用日志只是为了查看它是否在重复,即使其中没​​有代码,它确实如此。不断没有尽头。这也发生在使用 if / else 语句,而不是 try / except.

我到底怎样才能阻止信号陷入循环?它应该每次都发送一封电子邮件,但是现在当对象更新时,用户会收到无限的电子邮件,直到我重新启动 Django。

我这里真的是一头雾水...

顺便说一句,这不会发生在我的测试服务器上,只发生在我的 live/staging 服务器上。

编辑:

如果您以后要查看此内容,这就是我调试问题的方式。

寻找任何 running/hitting 你的服务器并可能引发 signal 到 运行 的任何东西。对我来说,它是一个特定的对象,被设置为 sender 的信号 运行,每次我使用的 webhook 都会导致一个函数 运行,它正在修改具体 sender object.

所以我对 post 将此作为“答案”犹豫不决,因为这可能只会为我自己的问题提供理由,但我已经弄清楚发生了什么...

我最近将一个 Webhook 连接到我的 Django 应用程序,该应用程序不断地访问它并更新信息...我已将我的 webhook 函数修复为仅访问模型对象(上面,它是 Class Item) 所以它降低了信号 运行.

的次数

但是,这是信号 运行 完成的字面修复:

# signals.py
...

obj = sender.objects.get(pk=instance.pk)

# We are checking if the instance value is different than what the object value
# is. Remember, this is PRE_SAVE, so the object should be different than the
# instance
if instance.variable and not obj.variable:
    ...

...