Django:将变量从pre_save传递到post_save信号

雅各布·F

我使用pre_save和post_save信号将分析数据发送到Mixpanel。我更喜欢将此与模型的保存方法分开。

当pre_save信号出现时,是否可以保存实例的旧值,然后在post_save上针对它们检查新值?

我的代码如下所示:

@receiver(pre_save, sender=Activity)
def send_user_profile_analytics(sender, **kwargs):
    activity_completed_old_value = kwargs['instance'].is_completed
    # store this value somewhere?

@receiver(post_save, sender=Activity)
def send_user_profile_analytics(sender, **kwargs):
    if kwargs['instance'].is_completed != activity_completed_old_value:
        # send analytics

对我来说,使用post_save来发送分析数据似乎比pre_save更为健壮,但是那时我看不到模型实例中发生了什么变化。我想防止在模型的保存功能中使用全局变量或实现某些操作。

您可以将它们存储为实例属性。

@receiver(pre_save, sender=Activity)
def send_user_profile_analytics(sender, **kwargs):
    instance = kwargs['instance']
    instance._activity_completed_old_value = instance.is_completed

@receiver(post_save, sender=Activity)
def send_user_profile_analytics(sender, **kwargs):
    instance = kwargs['instance']     
    if instance.is_completed != instance._activity_completed_old_value:
        # send analytics

这样,您仅在is_completed期间发生变化时才“发送分析” save(这意味着save不仅存储了价值,而且进行了进一步的阐述)。

如果要在实例生存期内(即从创建到save更改字段时执行操作,则应在post_init(而不是pre_save期间存储初始值

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

传递参数Django信号-post_save / pre_save

来自分类Dev

将 pre_save 信号更改为 post_save?Django

来自分类Dev

Django更改使用内联时调用pre_save post_save信号的顺序?

来自分类Dev

信号 Post_Save 和 Pre_Save 出错:创建和自我!怎么修?

来自分类Dev

Django信号post_save()

来自分类Dev

何时在Django中使用pre_save,保存,post_save?

来自分类Dev

Django信号post_save更新

来自分类Dev

Django从post_save信号访问ManyToMany字段

来自分类Dev

识别Django post_save信号中已更改的字段

来自分类Dev

使用post_save信号在Django模型上模拟方法

来自分类Dev

具有post_save信号的django_mptt模型

来自分类Dev

Django从post_save信号访问ManyToMany字段

来自分类Dev

具有post_save信号的django_mptt模型

来自分类Dev

Django:断开 post_save 信号以避免递归

来自分类Dev

如何将Django post_save信号作为后台进程运行?

来自分类Dev

Django pre_save不保存更改

来自分类Dev

Django pre_save信号:我怎么知道它是插入还是更新

来自分类Dev

Django pre_save信号-异常会导致交易失败吗?

来自分类Dev

如何使用pre_save信号检查django admin中是否选择了新文件?

来自分类Dev

Django pre_save信号:我怎么知道它是插入还是更新

来自分类Dev

如何更改pre_save信号中的models.FileField?

来自分类Dev

在pre_save信号中使用PIL调整图像大小

来自分类Dev

如何在post_save信号上以Django模型获取当前登录的用户?

来自分类Dev

由post_save信号执行的Django代码在原子事务内发生

来自分类Dev

Django管理命令并将自定义参数发送到post_save信号

来自分类Dev

由post_save信号执行的Django代码在原子事务内发生

来自分类Dev

Django管理命令并将自定义参数发送到post_save信号

来自分类Dev

Python Django 模型信号 Post_Save 查询对象不包含保存的对象

来自分类Dev

在post_save django上发送邮件

Related 相关文章

  1. 1

    传递参数Django信号-post_save / pre_save

  2. 2

    将 pre_save 信号更改为 post_save?Django

  3. 3

    Django更改使用内联时调用pre_save post_save信号的顺序?

  4. 4

    信号 Post_Save 和 Pre_Save 出错:创建和自我!怎么修?

  5. 5

    Django信号post_save()

  6. 6

    何时在Django中使用pre_save,保存,post_save?

  7. 7

    Django信号post_save更新

  8. 8

    Django从post_save信号访问ManyToMany字段

  9. 9

    识别Django post_save信号中已更改的字段

  10. 10

    使用post_save信号在Django模型上模拟方法

  11. 11

    具有post_save信号的django_mptt模型

  12. 12

    Django从post_save信号访问ManyToMany字段

  13. 13

    具有post_save信号的django_mptt模型

  14. 14

    Django:断开 post_save 信号以避免递归

  15. 15

    如何将Django post_save信号作为后台进程运行?

  16. 16

    Django pre_save不保存更改

  17. 17

    Django pre_save信号:我怎么知道它是插入还是更新

  18. 18

    Django pre_save信号-异常会导致交易失败吗?

  19. 19

    如何使用pre_save信号检查django admin中是否选择了新文件?

  20. 20

    Django pre_save信号:我怎么知道它是插入还是更新

  21. 21

    如何更改pre_save信号中的models.FileField?

  22. 22

    在pre_save信号中使用PIL调整图像大小

  23. 23

    如何在post_save信号上以Django模型获取当前登录的用户?

  24. 24

    由post_save信号执行的Django代码在原子事务内发生

  25. 25

    Django管理命令并将自定义参数发送到post_save信号

  26. 26

    由post_save信号执行的Django代码在原子事务内发生

  27. 27

    Django管理命令并将自定义参数发送到post_save信号

  28. 28

    Python Django 模型信号 Post_Save 查询对象不包含保存的对象

  29. 29

    在post_save django上发送邮件

热门标签

归档