From 88bb23b506e219983112cc5ca1d63bcb3445da50 Mon Sep 17 00:00:00 2001 From: Diederik van der Boor Date: Thu, 18 Feb 2016 13:14:09 +0100 Subject: [PATCH] Fix deferred loading of 'pk' field --- docs/changelog.rst | 1 + polymorphic/query.py | 2 +- polymorphic/tests.py | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 1a61b16..ca89ba4 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -7,6 +7,7 @@ Changes in git * Fixed support for ``PolymorphicManager.from_queryset()`` for custom query sets. * Fixed Django 1.7 ``changeform_view()`` redirection to the child admin site. This fixes custom admin code that uses these views, such as django-reversion_'s ``revision_view()`` / ``recover_view()``. +* Fixed ``.only('pk')`` field support. Version 0.9 (2016-02-17) diff --git a/polymorphic/query.py b/polymorphic/query.py index 0a31f98..1b71bdd 100644 --- a/polymorphic/query.py +++ b/polymorphic/query.py @@ -169,7 +169,7 @@ class PolymorphicQuerySet(QuerySet): field_names = set(field_names) if 'pk' in field_names: field_names.remove('pk') - field_names.add(self.get_meta().pk.name) + field_names.add(self.model._meta.pk.name) if defer: # Remove any existing deferred names from the current set before diff --git a/polymorphic/tests.py b/polymorphic/tests.py index 671e445..3e1aa4f 100644 --- a/polymorphic/tests.py +++ b/polymorphic/tests.py @@ -569,7 +569,7 @@ class PolymorphicTests(TestCase): self.assertEqual(repr(objects_deferred[3]), '') - objects_only = Model2A.objects.only('polymorphic_ctype', 'field1') + objects_only = Model2A.objects.only('pk', 'polymorphic_ctype', 'field1') self.assertIn('field1', objects_only[0].__dict__, 'qs.only("field1") was used, but field1 was incorrectly deferred') self.assertIn('field1', objects_only[3].__dict__, @@ -580,13 +580,13 @@ class PolymorphicTests(TestCase): self.assertEqual(repr(objects_only[0]), '') self.assertEqual(repr(objects_only[1]), - '') self.assertEqual(repr(objects_only[2]), - '') self.assertEqual(repr(objects_only[3]), - '') # A bug in Django 1.4 prevents using defer across reverse relations