gpt4 book ai didi

python - 如何从其他信号发送django信号

转载 作者:太空狗 更新时间:2023-10-29 21:00:18 28 4
gpt4 key购买 nike

长话短说:
我需要一种在 post_save 信号之后自动触发自定义信号的方法,有什么方法可以做到吗?


我目前正在为 django 开发一个库,它需要在 django 中使用 post_save 信号来来去去,我想知道是否有可能在之后 post_save,这样我就可以实现我自己的,而不是干预 post_save,以防使用该库的项目需要这样做。

到目前为止,我知道信号应该接收一个类作为发送者参数,如果我手动触发来自 post_save 的信号,我将什么都不做(我仍然会干预它)。有什么解决方法吗?我在文档中遗漏了什么吗?

最佳答案

虽然这可以通过从另一个信号内部手动调用一个信号来实现,如下所示:

post_save.send(MyModel, instance=a_mymodel_instance)

有更简单的方法来做这样的事情:

让我们假设您遵循我在此答案中使用的文件组织:Django Create and Save Many instances of model when another object are created


建议一:

  • 让我们假设您的第一个 post_saveMyModel1 做了一些事情,另一个 post_save 信号对 MyModel2 做了一些事情在对触发第一个信号的实例进行一些处理之后。
  • post_save始终在 save() 方法的结尾 发送。
  • 按如下方式组织您的信号:

    @receiver(post_save, sender=MyModel1)
    def mymodel1_signal (sender, instance, **kwargs):
    Do stuff on MyModel1 instance...
    Do also stuff on MyModel2 and then call MyModel2.save()


    @receiver(post_save, sender=MyModel2)
    def mymodel2_signal (sender, instance, **kwargs):
    Do stuff on MyModel2 instance...

    这样,mymodel2_signal 信号将在 mymodel1_signal 调用 MyModel2.save() 后被触发。

    <

建议2:

  • 使用混合信号来实现正确的“时机”。
  • 让我们假设您想要在保存 MyModel1 之前在 MyModel2 上启动一个进程
  • 使用 pre_save和一个 post_save 信号:

    @receiver(pre_save, sender=MyModel1)
    def mymodel1_signal (sender, instance, **kwargs):
    Do stuff on MyModel1 instance...
    Do also stuff on MyModel2 and then call MyModel2.save()


    @receiver(post_save, sender=MyModel2)
    def mymodel2_signal (sender, instance, **kwargs):
    Do stuff on MyModel2 instance...

建议三:

直接在 MyModel1 post_save 信号中使用 MyModel2 方法。

关于python - 如何从其他信号发送django信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47576486/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com