diff --git a/django/db/models/deletion.py b/django/db/models/deletion.py
index a8c98f5b83..831e3c03db 100644
--- a/django/db/models/deletion.py
+++ b/django/db/models/deletion.py
@@ -1,5 +1,4 @@
 from collections import Counter, OrderedDict
-from itertools import chain
 from operator import attrgetter
 
 from django.db import IntegrityError, connections, transaction
@@ -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)
     )