diff --git a/django/contrib/contenttypes/models.py b/django/contrib/contenttypes/models.py
index 1bb07e0..d03f770 100644
--- a/django/contrib/contenttypes/models.py
+++ b/django/contrib/contenttypes/models.py
@@ -17,9 +17,8 @@ def get_by_natural_key(self, app_label, model):
 
     def _get_opts(self, model):
         opts = model._meta
-        while opts.proxy:
-            model = opts.proxy_for_model
-            opts = model._meta
+        if model._deferred:
+            opts = opts.proxy_for_model._meta
         return opts
 
     def _get_from_cache(self, opts):
diff --git a/tests/modeltests/proxy_models/tests.py b/tests/modeltests/proxy_models/tests.py
index 3ec8465..04ea203 100644
--- a/tests/modeltests/proxy_models/tests.py
+++ b/tests/modeltests/proxy_models/tests.py
@@ -217,8 +217,10 @@ def _handler(*args, **kwargs):
         signals.post_save.disconnect(h6, sender=MyPersonProxy)
 
     def test_content_type(self):
+        # A model and a proxy of this model do not
+        # share the same ContentType see #17648
         ctype = ContentType.objects.get_for_model
-        self.assertTrue(ctype(Person) is ctype(OtherPerson))
+        self.assertFalse(ctype(Person) is ctype(OtherPerson))
 
     def test_user_userproxy_userproxyproxy(self):
         User.objects.create(name='Bruce')
