Django: RecursionError: maximum recursion depth exceeded
Django: RecursionError: maximum recursion depth exceeded
我在保存某个模型时在 django 中遇到运行时错误。
我想用两个实例保存模型
所以我做了以下事情:
class Journal(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True
)
company = models.ForeignKey(
company, on_delete=models.CASCADE, null=True, blank=True, related_name="Companyname"
)
counter = models.IntegerField(blank=True, null=True)
urlhash = models.CharField(max_length=100, null=True, blank=True, unique=True)
date = models.DateField(default=datetime.date.today)
voucher_id = models.PositiveIntegerField(blank=True, null=True)
voucher_type = models.CharField(max_length=100, blank=True)
by = models.ForeignKey(ledger1, on_delete=models.CASCADE, related_name="Debitledgers")
to = models.ForeignKey(ledger1, on_delete=models.CASCADE, related_name="Creditledgers")
debit = models.DecimalField(max_digits=10, decimal_places=2, null=True)
credit = models.DecimalField(max_digits=10, decimal_places=2, null=True)
narration = models.TextField(blank=True)
@receiver(pre_save, sender=Journal)
def pl_journal(sender, instance, *args, **kwargs):
if (
instance.debit != None
or instance.credit != None
or instance.by.group1_Name.group_Name == "Indirect Expense"
):
Journal.objects.update_or_create(
user=instance.user,
company=instance.company,
date=instance.date,
voucher_id=instance.id,
voucher_type="Journal",
by=instance.by,
to=ledger1.objects.filter(
user=instance.user, company=instance.company, name__icontains="Profit & Loss A/c"
).first(),
debit=instance.debit,
dredit=instance.credit,
)
问题出在我的信号中的以下代码行中:
to=ledger1.objects.filter(user=instance.user,company=instance.company,name__icontains='Profit & Loss A/c').first()
有人知道为什么会发生此错误吗?
有什么办法可以解决吗?
谢谢
你有一个 pre_save
模型的信号接收器,最终管理相同的模型,所以你得到这样的东西:
journal.save()
被称为
pl_journal(sender=Journal, instance=journal)
被称为
Journal.objects.update_or_create(...)
(可能)被称为
.update_or_create()
在其更新或创建的 Journal 实例上调用 .save()
,因此返回到步骤 1。
您因此发生了无限递归,Python 限制了最大递归深度并引发了该异常。
我在保存某个模型时在 django 中遇到运行时错误。
我想用两个实例保存模型
所以我做了以下事情:
class Journal(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True
)
company = models.ForeignKey(
company, on_delete=models.CASCADE, null=True, blank=True, related_name="Companyname"
)
counter = models.IntegerField(blank=True, null=True)
urlhash = models.CharField(max_length=100, null=True, blank=True, unique=True)
date = models.DateField(default=datetime.date.today)
voucher_id = models.PositiveIntegerField(blank=True, null=True)
voucher_type = models.CharField(max_length=100, blank=True)
by = models.ForeignKey(ledger1, on_delete=models.CASCADE, related_name="Debitledgers")
to = models.ForeignKey(ledger1, on_delete=models.CASCADE, related_name="Creditledgers")
debit = models.DecimalField(max_digits=10, decimal_places=2, null=True)
credit = models.DecimalField(max_digits=10, decimal_places=2, null=True)
narration = models.TextField(blank=True)
@receiver(pre_save, sender=Journal)
def pl_journal(sender, instance, *args, **kwargs):
if (
instance.debit != None
or instance.credit != None
or instance.by.group1_Name.group_Name == "Indirect Expense"
):
Journal.objects.update_or_create(
user=instance.user,
company=instance.company,
date=instance.date,
voucher_id=instance.id,
voucher_type="Journal",
by=instance.by,
to=ledger1.objects.filter(
user=instance.user, company=instance.company, name__icontains="Profit & Loss A/c"
).first(),
debit=instance.debit,
dredit=instance.credit,
)
问题出在我的信号中的以下代码行中:
to=ledger1.objects.filter(user=instance.user,company=instance.company,name__icontains='Profit & Loss A/c').first()
有人知道为什么会发生此错误吗?
有什么办法可以解决吗?
谢谢
你有一个 pre_save
模型的信号接收器,最终管理相同的模型,所以你得到这样的东西:
journal.save()
被称为pl_journal(sender=Journal, instance=journal)
被称为Journal.objects.update_or_create(...)
(可能)被称为.update_or_create()
在其更新或创建的 Journal 实例上调用.save()
,因此返回到步骤 1。
您因此发生了无限递归,Python 限制了最大递归深度并引发了该异常。