diff --git a/django/db/models/deletion.py b/django/db/models/deletion.py
index 310e3af..f9be668 100644
--- a/django/db/models/deletion.py
+++ b/django/db/models/deletion.py
@@ -202,7 +202,9 @@ class Collector(object):
             for model in models:
                 if model in sorted_models:
                     continue
-                dependencies = self.dependencies.get(model)
+                # Dependencies keys are not proxy models
+                base_model = model._meta.proxy and model._meta.proxy_for_model or model
+                dependencies = self.dependencies.get(base_model)
                 if not (dependencies and dependencies.difference(sorted_models)):
                     sorted_models.append(model)
                     found = True
diff --git a/tests/modeltests/proxy_models/models.py b/tests/modeltests/proxy_models/models.py
index 90d54d9..3a89a5f 100644
--- a/tests/modeltests/proxy_models/models.py
+++ b/tests/modeltests/proxy_models/models.py
@@ -5,6 +5,7 @@ than using a new table of their own. This allows them to act as simple proxies,
 providing a modified interface to the data from the base class.
 """
 
+from django.contrib.auth.models import User as AuthUser
 from django.contrib.contenttypes.models import ContentType
 from django.db import models
 
@@ -161,4 +162,12 @@ class Improvement(Issue):
 
 class ProxyImprovement(Improvement):
     class Meta:
-        proxy = True
\ No newline at end of file
+        proxy = True
+
+
+class AuthUserProxy(AuthUser):
+    class Meta:
+        proxy = True
+
+class Profile(models.Model):
+    user = models.ForeignKey(AuthUser)
diff --git a/tests/modeltests/proxy_models/tests.py b/tests/modeltests/proxy_models/tests.py
index 0a46a25..226369d 100644
--- a/tests/modeltests/proxy_models/tests.py
+++ b/tests/modeltests/proxy_models/tests.py
@@ -11,6 +11,7 @@ from models import MyPersonProxy, Abstract, OtherPerson, User, UserProxy
 from models import UserProxyProxy, Country, State, StateProxy, TrackerUser
 from models import BaseUser, Bug, ProxyTrackerUser, Improvement, ProxyProxyBug
 from models import ProxyBug, ProxyImprovement
+from models import AuthUser, AuthUserProxy, Profile
 
 class ProxyModelTests(TestCase):
     def test_same_manager_queries(self):
@@ -312,3 +313,13 @@ class ProxyModelTests(TestCase):
         management.call_command('loaddata', 'mypeople.json', verbosity=0, commit=False)
         p = MyPerson.objects.get(pk=100)
         self.assertEqual(p.name, 'Elvis Presley')
+
+    def test_delete_cascade_to_proxy_objects(self):
+        """
+        Test that delete() cascades to proxy objects. Regression for #16128.
+        """
+        proxy_joe = AuthUserProxy.objects.create()
+        joe_s_profile = Profile.objects.create(user=proxy_joe)
+        self.assertEqual(Profile.objects.count(), 1)
+        proxy_joe.delete()
+        self.assertEqual(Profile.objects.count(), 0)
