我需要做一个保存与模型,但我需要断开一些接收器的信号之前保存它。
我是说
我有一个模型:
class MyModel(models.Model):
...
def pre_save_model(sender, instance, **kwargs):
...
pre_save.connect(pre_save_model, sender=MyModel)
在代码的另一个地方,我需要这样的东西:
a = MyModel()
...
disconnect_signals_for_model(a)
a.save()
...
reconnect_signals_for_model(a)
因为我需要在这种情况下保存模型而不执行函数pre_save_model。
6条答案
按热度按时间sauutmhj1#
对于一个干净和可重用的解决方案,您可以使用上下文管理器:
现在,您可以执行以下操作:
dispatch_uid
,你必须使用dispatch_uid
参数。*lc8prwob2#
你可以像Haystack在RealTimeSearchIndex中那样连接和断开信号,这似乎更标准:
68de4m5k3#
我还没有测试过下面的代码,但它应该可以工作:
它将使来自 * 所有 * 发送方的信号静音,但不仅仅是
instance.__class__
。此版本仅禁用给定模型的信号:
oalqel3c4#
如果您只想断开和重新连接一个自定义信号,您可以使用以下代码:
通过这种方式,你可以做到:
vktxenjb5#
我需要在单元测试中防止某些信号被触发,所以我基于qris的响应做了一个装饰器:
使用它很简单:
z31licg06#
这里是临时禁用每个示例的信号接收器的解决方案,允许在生产(线程安全)上使用它
[usage.py]**
[code.py]**
[signals.py]**