From 2d9b581f34324ac2759452fb5a839282ca35f361 Mon Sep 17 00:00:00 2001 From: Shaun Duncan Date: Fri, 15 Jun 2012 15:42:19 -0400 Subject: [PATCH] Adding check if cascade delete is self-referencing. If so, prevent recursing if there are no objects to evaluate --- mongoengine/queryset.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index 1fb3eda7..8370d333 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -1314,7 +1314,9 @@ class QuerySet(object): document_cls, field_name = rule_entry rule = doc._meta['delete_rules'][rule_entry] if rule == CASCADE: - document_cls.objects(**{field_name + '__in': self}).delete(safe=safe) + ref_q = document_cls.objects(**{field_name + '__in': self}) + if doc != document_cls or (doc == document_cls and ref_q.count() > 0): + ref_q.delete(safe=safe) elif rule == NULLIFY: document_cls.objects(**{field_name + '__in': self}).update( safe_update=safe,