Python post_save.disconnect根本不起作用
我试图让Django在一个案例中不发送信号。当添加模型Python post_save.disconnect根本不起作用,python,django,django-models,django-signals,Python,Django,Django Models,Django Signals,我试图让Django在一个案例中不发送信号。当添加模型交付的新实例(在创建作业之后)作为模型作业的属性时,我不想发送信号,因为该信号应提醒管理员作业已编辑 不幸的是,我不能让它工作 @receiver(post_save,sender=Job) # When Job is created or edited def alert_admin(sender,instance,created,**kwargs): if created: email.AdminNotificat
交付
的新实例(在创建作业
之后)作为模型作业
的属性时,我不想发送信号,因为该信号应提醒管理员作业已编辑
不幸的是,我不能让它工作
@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\u delivery
。但这似乎没有发生<代码>警报\u管理员似乎首先被调用。所以你在create\u delivery
中所做的任何信号禁用都是浪费
Django不对信号的触发顺序提供任何保证或控制()
您可以向实例添加一个简单的标志,告诉信号处理器该信号不需要进一步处理
if hasattr(instance,'signal_processed'):
return
else:
# do whatever processing
instance.signal_processed = True
这能解决你的问题吗?