Python post_save.disconnect根本不起作用

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

我试图让Django在一个案例中不发送信号。当添加模型
交付
的新实例(在创建
作业
之后)作为模型
作业
的属性时,我不想发送信号,因为该信号应提醒管理员作业已编辑

不幸的是,我不能让它工作

@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
这能解决你的问题吗?