make the delete rules nicer and safer in BaseQuerySet.delete
This commit is contained in:
parent
566e8ee801
commit
30ebe7c11e
@ -422,15 +422,15 @@ class BaseQuerySet(object):
|
||||
return cnt
|
||||
|
||||
delete_rules = doc._meta.get('delete_rules') or {}
|
||||
delete_rules = list(delete_rules.items())
|
||||
|
||||
# Check for DENY rules before actually deleting/nullifying any other
|
||||
# references
|
||||
for rule_entry in delete_rules:
|
||||
for rule_entry, rule in delete_rules:
|
||||
document_cls, field_name = rule_entry
|
||||
if document_cls._meta.get('abstract'):
|
||||
continue
|
||||
|
||||
rule = doc._meta['delete_rules'][rule_entry]
|
||||
if rule == DENY:
|
||||
refs = document_cls.objects(**{field_name + '__in': self})
|
||||
if refs.limit(1).count() > 0:
|
||||
@ -440,12 +440,11 @@ class BaseQuerySet(object):
|
||||
)
|
||||
|
||||
# Check all the other rules
|
||||
for rule_entry in delete_rules:
|
||||
for rule_entry, rule in delete_rules:
|
||||
document_cls, field_name = rule_entry
|
||||
if document_cls._meta.get('abstract'):
|
||||
continue
|
||||
|
||||
rule = doc._meta['delete_rules'][rule_entry]
|
||||
if rule == CASCADE:
|
||||
cascade_refs = set() if cascade_refs is None else cascade_refs
|
||||
# Handle recursive reference
|
||||
|
Loading…
x
Reference in New Issue
Block a user