我的Django信号超出了最大递归深度

abautista

我有以下Django信号,当保存新记录时,该信号基本上触发将我的postgres db中的先前记录的点增加5的信号,但是我的Django信号将更改保存为1先前的记录,但我得到了错误 RecursionError: Maximum recursion depth exceeded

# models.py

from django.db.models.signals import post_save    

class Task(models.Model):
    ....


def update_points(sender, instance, **kwargs):

    qs = Task.objects.filter(status='Active')

    for task in qs:
        task.points = task.points + 5
        task.save() 

我究竟做错了什么?插入新记录后,我正在使用.save()方法将更新的记录保存在数据库中。

威廉·范昂塞姆

可能point.save()触发相同的信号。因此,您的信号会触发该信号,从而导致无限递归。

您可以批量查询更新值:

from django.db.models import F 

def update_points(sender, instance, **kwargs):
    Task.objects.filter(status='Active').update(points=F('points')+5)

这不仅可以绕开信令问题,而且可以批量查询,因此效率更高。

需要注意的是,如果你post_save,那么Task刚添加的,将是一部分QuerySet也许您想排除这一点Task在这种情况下,我们可以这样实现:

from django.db.models import Q, F
from django.db.models.signals import post_save

def update_points(sender, instance, created, **kwargs):
    if created:
        Task.objects.filter(~Q(pk=instance.pk), status='Active').update(
            points=F('points')+5
        )

post_save.connect(update_points, sender=Task)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用py2exe打包py文件时,“超出了最大递归深度”

来自分类Dev

Python:打印自定义异常时超出了最大递归深度

来自分类Dev

python中的运行时错误:“超出了最大递归深度”

来自分类Dev

电机:RuntimeError:将对象编码为BSON时,超出了最大递归深度

来自分类Dev

我收到一个递归错误[RuntimeError:调用Python对象时超出了最大递归深度]-但是我的代码是迭代的-还是吗?

来自分类Dev

Pygame-RuntimeError:调用Python对象时超出了最大递归深度

来自分类Dev

循环urllib时,“超出了最大递归深度”

来自分类Dev

Python:调用复制函数时,调用Python对象时超出了最大递归深度

来自分类Dev

Sympy RuntimeError:使用对数求解方程式时,超出了最大递归深度

来自分类Dev

RecursionError:使用线程时超出了最大递归深度

来自分类Dev

PyQt5:RecursionError:调用Python对象时超出了最大递归深度

来自分类Dev

汇总分类变量时,超出了最大递归深度

来自分类Dev

打印方法名称时调用Python对象时,超出了最大递归深度

来自分类Dev

比较两个对象时,超出了最大递归深度

来自分类Dev

python中的运行时错误:“超出了最大递归深度”

来自分类Dev

RuntimeError:使用默认的哈希方法超出了最大递归深度

来自分类Dev

Django模板自行扩展,尝试扩展Django管理模板时超出了最大递归深度

来自分类Dev

电机:RuntimeError:将对象编码为BSON时,超出了最大递归深度

来自分类Dev

避免异常值:在Django信号中调用Python对象时,超出了最大递归深度

来自分类Dev

RuntimeError:在运行openerp时调用Python对象时,超出了最大递归深度

来自分类Dev

安装模块时,超出了Python的最大递归深度

来自分类Dev

注销时超出最大递归深度(请求)

来自分类Dev

安德鲁曲线:调用 Python 对象时超出了最大递归深度

来自分类Dev

Python - RecursionError:比较错误中超出了最大递归深度

来自分类Dev

RuntimeError: 在运行 sqlite3 时调用 Python 对象时超出了最大递归深度

来自分类Dev

RecursionError:获取对象的 str 时超出了最大递归深度

来自分类Dev

超出子进程最大递归深度

来自分类Dev

对于 i in range(start,end): RecursionError: 比较时超出了最大递归深度

来自分类Dev

构建 whoosh 索引时超出了最大递归深度

Related 相关文章

  1. 1

    使用py2exe打包py文件时,“超出了最大递归深度”

  2. 2

    Python:打印自定义异常时超出了最大递归深度

  3. 3

    python中的运行时错误:“超出了最大递归深度”

  4. 4

    电机:RuntimeError:将对象编码为BSON时,超出了最大递归深度

  5. 5

    我收到一个递归错误[RuntimeError:调用Python对象时超出了最大递归深度]-但是我的代码是迭代的-还是吗?

  6. 6

    Pygame-RuntimeError:调用Python对象时超出了最大递归深度

  7. 7

    循环urllib时,“超出了最大递归深度”

  8. 8

    Python:调用复制函数时,调用Python对象时超出了最大递归深度

  9. 9

    Sympy RuntimeError:使用对数求解方程式时,超出了最大递归深度

  10. 10

    RecursionError:使用线程时超出了最大递归深度

  11. 11

    PyQt5:RecursionError:调用Python对象时超出了最大递归深度

  12. 12

    汇总分类变量时,超出了最大递归深度

  13. 13

    打印方法名称时调用Python对象时,超出了最大递归深度

  14. 14

    比较两个对象时,超出了最大递归深度

  15. 15

    python中的运行时错误:“超出了最大递归深度”

  16. 16

    RuntimeError:使用默认的哈希方法超出了最大递归深度

  17. 17

    Django模板自行扩展,尝试扩展Django管理模板时超出了最大递归深度

  18. 18

    电机:RuntimeError:将对象编码为BSON时,超出了最大递归深度

  19. 19

    避免异常值:在Django信号中调用Python对象时,超出了最大递归深度

  20. 20

    RuntimeError:在运行openerp时调用Python对象时,超出了最大递归深度

  21. 21

    安装模块时,超出了Python的最大递归深度

  22. 22

    注销时超出最大递归深度(请求)

  23. 23

    安德鲁曲线:调用 Python 对象时超出了最大递归深度

  24. 24

    Python - RecursionError:比较错误中超出了最大递归深度

  25. 25

    RuntimeError: 在运行 sqlite3 时调用 Python 对象时超出了最大递归深度

  26. 26

    RecursionError:获取对象的 str 时超出了最大递归深度

  27. 27

    超出子进程最大递归深度

  28. 28

    对于 i in range(start,end): RecursionError: 比较时超出了最大递归深度

  29. 29

    构建 whoosh 索引时超出了最大递归深度

热门标签

归档