Index: modeltests/proxy_models/tests.py
===================================================================
--- modeltests/proxy_models/tests.py	(revision 16297)
+++ modeltests/proxy_models/tests.py	(working copy)
@@ -10,7 +10,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 Issue, IssueWithProxy, ProxyBug, ProxyImprovement
 
 class ProxyModelTests(TestCase):
     def test_same_manager_queries(self):
@@ -312,3 +312,20 @@
         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.
+        """
+        # delete with a foreign key on a regular model
+        joe = TrackerUser.objects.create(name='Regular Joe', status='contrib')
+        joe_s_issue = Issue.objects.create(summary='deep magic', assignee=joe)
+        self.assertEqual(Issue.objects.count(), 1)
+        joe.delete()
+        self.assertEqual(Issue.objects.count(), 0)
+        # delete with a foreign key on a proxy model
+        joe = ProxyTrackerUser.objects.create(name='Proxy Joe', status='contrib')
+        joe_s_issue = IssueWithProxy.objects.create(summary='deeper magic', assignee=joe)
+        self.assertEqual(IssueWithProxy.objects.count(), 1)
+        joe.delete()
+        self.assertEqual(IssueWithProxy.objects.count(), 0)
Index: modeltests/proxy_models/models.py
===================================================================
--- modeltests/proxy_models/models.py	(revision 16297)
+++ modeltests/proxy_models/models.py	(working copy)
@@ -131,6 +131,11 @@
     def __unicode__(self):
         return ':'.join((self.__class__.__name__,self.summary,))
 
+class IssueWithProxy(models.Model):
+    summary = models.CharField(max_length=255)
+    assignee = models.ForeignKey(ProxyTrackerUser)
+
+
 class Bug(Issue):
     version = models.CharField(max_length=50)
     reporter = models.ForeignKey(BaseUser)
