- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图让 Django 在一种情况下不发送信号。添加模型 Delivery
的新实例(在创建 Job
之后)作为模型 Job
的属性时,我不想发送信号,因为该信号应提醒管理员 Job
已被编辑。
不幸的是我无法让它发挥作用。
@receiver(post_save,sender=Job) # When Job is created or edited
def alert_admin(sender,instance,created,**kwargs):
if created:
email.AdminNotifications.new_order(instance)
else:
email.AdminNotifications.edited_order(instance)
@receiver(post_save,sender=Job) # When job is created, I want to create a delivery object as an attribute of Job
def create_delivery(sender,instance,created,**kwargs):
if created:
delivery,created_delivery = Delivery.objects.get_or_create(job=instance)
instance.delivery = delivery
delivery.save()
post_save.disconnect(alert_admin)
instance.save() # I DONT WANT TO SEND SIGNAL IN THIS CASE
post_save.connect(alert_admin)
问题出在哪里?我这样做了,但我仍然收到两个警报 - 新订单
和已编辑订单
。
最佳答案
问题在于您两次收听同一个信号。
@receiver(post_save,sender=Job) # When Job is created or edited
def alert_admin(sender,instance,created,**kwargs):
###
@receiver(post_save,sender=Job):
def create_delivery(sender,instance,created,**kwargs):
###
您假设将首先调用create_delivery
。但这似乎并没有发生。 alert_admin
似乎首先被调用。因此,您在 create_delivery
中执行的任何信号禁用操作都将成为浪费。
Django 不对信号触发的顺序提供任何保证或控制 ( what's the order of post_save receiver in django? )
您可以向实例添加一个简单的标志来告诉信号处理器该信号不需要进一步处理。
if hasattr(instance,'signal_processed'):
return
else:
# do whatever processing
instance.signal_processed = True
关于python - post_save.disconnect 根本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37622183/
考虑以下: class OrderForm(models.Model): title = models.CharField(max_length=100) desc = models
我有一个专门与管理员一起使用的应用程序。 我想在每次创建/修改新对象时发送一封电子邮件,从我的搜索来看,使用 post_save 似乎是最好的方法。 不幸的是,文档对此并不太清楚...... 有人可以
我有一个 post_save所有对象(不仅是我的应用程序)的信号,我在其中创建了一个 SignalInfo (此模型来自我的应用程序)对象,将有关创建/编辑对象的信息放入其中并保存。在我开始使用南迁移
我正在应用 post_save 信号来为每个对象应用用户权限,然后相应地过滤查询集。 我的模型是这样的: class Project(models.Model): # Relations wi
阅读文档后, https://docs.djangoproject.com/en/dev/topics/signals/ 我在我的signals.py文件中创建了这个: from django.db.
我需要在 Entry 的新实例时发送电子邮件模型是通过管理面板创建的。所以在 models.py我有: class Entry(models.Model): attachments = m
我有以下代码: @receiver(post_save, sender=SomeModel, dispatch_uid="build") def handle_creation(sender, ins
我已经编写了一些 API,它们各自的功能在事务 block 内执行。我调用save()一个/几个模型的实例上的方法(经过一些修改),并且还在中连续索引了该实例的一些JSON相关信息 Elasticse
我有一个名为 EmailUser 的自定义用户模型我正在尝试在 post_save 上分配自定义模型权限。我在 models.py 中有以下信号 @receiver(post_save, sender
我的模型位于单独的文件中: models \ |__init__.py |event.py |a_thing.py |... 在 __init__.py 中,我导入每个模型,然后设置信号处理。
我有一个个人资料模型,其中包含作为外国关键领域的经验和教育。当我访问个人资料模板时,它会抛出异常。 我尝试过 post_save, def create_education(sender, insta
Django 的 post_save 信号对使用多表继承的模型表现得很奇怪 当使用具有多表继承的模型时,我注意到 Django 的 post_save 信号的工作方式有一个奇怪的行为。 我有这两个模型
我有三个模型:User(来自django.contrib.auth.models)、UserProfile和GameCharacter >. 我设置了以下接收器,以便在创建User时,也会自动创建Us
所以我正在使用 django-simple-history 模块来跟踪模型实例中的变化。但是,它使用 post_save 信号来执行此操作。在我的项目中,我还需要它在 update() 上触发。 我的
所以我阅读了 Django 源代码(1.5 后),您现在可以将多个信号注册到接收器函数: def receiver(signal, **kwargs): """ A decorator
我有一个like 功能,就像社交网络的like 或thumbs up 功能一样;用户点击星号/心形/任何东西来标记喜欢的内容。这是用 ajax 完成的,必须很快。 这里唯一的问题是,由于某些原因,我必
我需要对 Django 中新创建的对象进行一些后台后处理。此后处理应仅在新对象上运行,而不是刚刚更新的对象。 我知道在 pre_save 中我可以检查对象是否有 id,如果没有则它是一个新对象。但问题
docs说: post_save django.db.models.signals.post_save created A boolean; True if a -new- record was cr
模型.py from django.db import models from django.db.models.signals import post_save from django.dispat
以下代码位于 Django 信号中,当副本数为“2”时,以下代码创建 80 多个副本,然后崩溃......出了什么问题? def internal_signal(sender, instance, s
我是一名优秀的程序员,十分优秀!