【问题标题】:How can I disconnect a django signal?如何断开 django 信号?
【发布时间】:2016-01-28 22:08:22
【问题描述】:

我的 MessageFolder 模型中有一个信号可以正常工作,但是在某些特殊情况下,我不希望 post_save 信号动作发生。在这种情况下如何停用它?

我尝试了以下方法,但它不起作用。

Views.py

        signals.post_save.disconnect(receiver=MessageFolder,sender=Message)

        email_message = EmailMessage(
            subject,
            message,
            my_username,
            [recipent,],
            [],  # ['bcc@example.com'],
            headers = {'Reply-To': 'gusreyes01@example.com'}
        )

        signals.post_save.connect(MessageFolder,MessageFolder.assign_message_folder)

        # Save it
        my_mailbox.record_outgoing_message(
            email_message.message()
        )

Models.py

class MessageFolder(models.Model):

folder        = models.ForeignKey(Folder, null = True, blank = True)
message       = models.ForeignKey(Message, null = True, blank = True)

@receiver((post_save), sender=Message, dispatch_uid="assign_message_folder")
def assign_message_folder(sender, instance, created, **kwargs):
    if not created: 
        return
    else:
        # generate MessageFolder && UserFolder
        if(instance.outgoing):
            message_folder = MessageFolder(None, 2, instance.pk)
        else:
            message_folder = MessageFolder(None, 1, instance.pk)

    message_folder.save()
    return

【问题讨论】:

    标签: python django model signals


    【解决方案1】:

    我已经使用了以下内容,它对我有用

    断开连接:

    signals.post_save.disconnect(assign_message_folder, sender=MessageFolder)
    

    连接:

    signals.post_save.connect(assign_message_folder, sender=MessageFolder)
    

    【讨论】:

    • 由于某种原因,我在使用 "uid_dipatch" 之前无法使其工作,但是我最近没有听到关于信号的好消息,所以我将尝试不同的路径。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2014-02-18
    • 2013-07-14
    • 1970-01-01
    相关资源
    最近更新 更多