Loading django/db/models/deletion.py +1 −10 Original line number Diff line number Diff line from collections import Counter, OrderedDict from itertools import chain from operator import attrgetter from django.db import IntegrityError, connections, transaction Loading Loading @@ -53,18 +52,10 @@ def DO_NOTHING(collector, field, sub_objs, using): def get_candidate_relations_to_delete(opts): # Collect models that contain candidate relations to delete. This may include # relations coming from proxy models. candidate_models = {opts} candidate_models = candidate_models.union(opts.concrete_model._meta.proxied_children) # For each model, get all candidate fields. candidate_model_fields = chain.from_iterable( opts.get_fields(include_hidden=True) for opts in candidate_models ) # The candidate relations are the ones that come from N-1 and 1-1 relations. # N-N (i.e., many-to-many) relations aren't candidates for deletion. return ( f for f in candidate_model_fields f for f in opts.get_fields(include_hidden=True) if f.auto_created and not f.concrete and (f.one_to_one or f.one_to_many) ) Loading Loading
django/db/models/deletion.py +1 −10 Original line number Diff line number Diff line from collections import Counter, OrderedDict from itertools import chain from operator import attrgetter from django.db import IntegrityError, connections, transaction Loading Loading @@ -53,18 +52,10 @@ def DO_NOTHING(collector, field, sub_objs, using): def get_candidate_relations_to_delete(opts): # Collect models that contain candidate relations to delete. This may include # relations coming from proxy models. candidate_models = {opts} candidate_models = candidate_models.union(opts.concrete_model._meta.proxied_children) # For each model, get all candidate fields. candidate_model_fields = chain.from_iterable( opts.get_fields(include_hidden=True) for opts in candidate_models ) # The candidate relations are the ones that come from N-1 and 1-1 relations. # N-N (i.e., many-to-many) relations aren't candidates for deletion. return ( f for f in candidate_model_fields f for f in opts.get_fields(include_hidden=True) if f.auto_created and not f.concrete and (f.one_to_one or f.one_to_many) ) Loading