fix cascade delete cycle issuue
This commit is contained in:
parent
02f61c323d
commit
646baddce4
@ -346,7 +346,7 @@ class BaseQuerySet(object):
|
|||||||
return 0
|
return 0
|
||||||
return self._cursor.count(with_limit_and_skip=with_limit_and_skip)
|
return self._cursor.count(with_limit_and_skip=with_limit_and_skip)
|
||||||
|
|
||||||
def delete(self, write_concern=None, _from_doc_delete=False):
|
def delete(self, write_concern=None, _from_doc_delete=False, cascade_refs=None):
|
||||||
"""Delete the documents matched by the query.
|
"""Delete the documents matched by the query.
|
||||||
|
|
||||||
:param write_concern: Extra keyword arguments are passed down which
|
:param write_concern: Extra keyword arguments are passed down which
|
||||||
@ -363,6 +363,11 @@ class BaseQuerySet(object):
|
|||||||
queryset = self.clone()
|
queryset = self.clone()
|
||||||
doc = queryset._document
|
doc = queryset._document
|
||||||
|
|
||||||
|
cascade_refs = set() if cascade_refs is None else cascade_refs
|
||||||
|
if doc in cascade_refs:
|
||||||
|
return 0
|
||||||
|
cascade_refs.add(doc)
|
||||||
|
|
||||||
if write_concern is None:
|
if write_concern is None:
|
||||||
write_concern = {}
|
write_concern = {}
|
||||||
|
|
||||||
@ -405,7 +410,7 @@ class BaseQuerySet(object):
|
|||||||
ref_q = document_cls.objects(**{field_name + '__in': self})
|
ref_q = document_cls.objects(**{field_name + '__in': self})
|
||||||
ref_q_count = ref_q.count()
|
ref_q_count = ref_q.count()
|
||||||
if ref_q_count > 0:
|
if ref_q_count > 0:
|
||||||
ref_q.delete(write_concern=write_concern)
|
ref_q.delete(write_concern=write_concern, cascade_refs=cascade_refs)
|
||||||
elif rule == NULLIFY:
|
elif rule == NULLIFY:
|
||||||
document_cls.objects(**{field_name + '__in': self}).update(
|
document_cls.objects(**{field_name + '__in': self}).update(
|
||||||
write_concern=write_concern, **{'unset__%s' % field_name: 1})
|
write_concern=write_concern, **{'unset__%s' % field_name: 1})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user