Adding check if cascade delete is self-referencing. If so, prevent

recursing if there are no objects to evaluate
This commit is contained in:
Shaun Duncan 2012-06-15 15:42:19 -04:00
parent 5bb63f645b
commit 2d9b581f34

View File

@ -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,