python - 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
.
解决方案
将非数据库布尔属性添加到默认为 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
推荐阅读
- sql - 希望返回从 2018 年 8 月 1 日到今天之后 5 天的数据
- sql - 如何将 SQL 数据与外部数据关联起来
- java - instanceof 确定 x 是 y 的一个实例。那么为什么在创建 x 的副本时需要强制转换呢?
- vba - 唯一值的 VBA 数组没有拾取某些数字
- sqlite - 同时访问 Sqlite 数据库
- node.js - 错误:ENOENT:没有这样的文件或目录,uv_resident_set_memory
- ruby-on-rails - 在 Rails 4 中构建 where 和 or 查询
- php - 在特定时间使用 PHP 执行 shell 脚本
- html - Angular 6 built-in date is not working in Edge/IE
- angular - 一指缩放地图框,角度为 5