diff --git a/django/contrib/contenttypes/models.py b/django/contrib/contenttypes/models.py
index 1bb07e0..28a5b25 100644
a
|
b
|
def get_by_natural_key(self, app_label, model):
|
16 | 16 | return ct |
17 | 17 | |
18 | 18 | def _get_opts(self, model): |
19 | | opts = model._meta |
20 | | while opts.proxy: |
21 | | model = opts.proxy_for_model |
22 | | opts = model._meta |
23 | | return opts |
| 19 | if model._deferred: |
| 20 | # Options must be retreived from the base class for deferred models |
| 21 | # since they're really just dynamic wrappers and should not have |
| 22 | # their own conten-type. |
| 23 | model = model.__class__.__bases__[0] |
| 24 | return model._meta |
24 | 25 | |
25 | 26 | def _get_from_cache(self, opts): |
26 | 27 | key = (opts.app_label, opts.object_name.lower()) |
diff --git a/tests/modeltests/proxy_models/tests.py b/tests/modeltests/proxy_models/tests.py
index 3ec8465..04ea203 100644
a
|
b
|
def _handler(*args, **kwargs):
|
217 | 217 | signals.post_save.disconnect(h6, sender=MyPersonProxy) |
218 | 218 | |
219 | 219 | def test_content_type(self): |
| 220 | # A model and a proxy of this model do not |
| 221 | # share the same ContentType see #17648 |
220 | 222 | ctype = ContentType.objects.get_for_model |
221 | | self.assertTrue(ctype(Person) is ctype(OtherPerson)) |
| 223 | self.assertFalse(ctype(Person) is ctype(OtherPerson)) |
222 | 224 | |
223 | 225 | def test_user_userproxy_userproxyproxy(self): |
224 | 226 | User.objects.create(name='Bruce') |
diff --git a/tests/regressiontests/defer_regress/tests.py b/tests/regressiontests/defer_regress/tests.py
index 4afe39b..4e4d80c 100644
a
|
b
|
def test_only_and_defer_usage_on_proxy_models(self):
|
169 | 169 | self.assertEqual(dp.name, proxy.name, msg=msg) |
170 | 170 | self.assertEqual(dp.value, proxy.value, msg=msg) |
171 | 171 | |
| 172 | # Instances of proxy models with deferred fields should |
| 173 | # return the content type of the proxy model (bug #17648) |
| 174 | ctype = ContentType.objects.get_for_model |
| 175 | c1 = ctype(Proxy.objects.all()[0]) |
| 176 | c2 = ctype(Proxy.objects.defer("name")[0]) |
| 177 | c3 = ctype(Proxy.objects.only("name")[0]) |
| 178 | self.assertTrue(c1 is c2 is c3) |
| 179 | |
172 | 180 | def test_resolve_columns(self): |
173 | 181 | rt = ResolveThis.objects.create(num=5.0, name='Foobar') |
174 | 182 | qs = ResolveThis.objects.defer('num') |