Fix deferred loading of 'pk' field

fix_request_path_info
Diederik van der Boor 2016-02-18 13:14:09 +01:00
parent 46e41a6c1c
commit 88bb23b506
3 changed files with 6 additions and 5 deletions

View File

@ -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)

View File

@ -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

View File

@ -569,7 +569,7 @@ class PolymorphicTests(TestCase):
self.assertEqual(repr(objects_deferred[3]),
'<Model2D_Deferred_field1: id 4, field1 (CharField), field2 (CharField), field3 (CharField), field4 (CharField)>')
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]),
'<Model2A: id 1, field1 (CharField)>')
self.assertEqual(repr(objects_only[1]),
'<Model2B_Deferred_field2_id: '
'<Model2B_Deferred_field2: '
'id 2, field1 (CharField), field2 (CharField)>')
self.assertEqual(repr(objects_only[2]),
'<Model2C_Deferred_field2_field3_id_model2a_ptr_id: '
'<Model2C_Deferred_field2_field3_model2a_ptr_id: '
'id 3, field1 (CharField), field2 (CharField), field3 (CharField)>')
self.assertEqual(repr(objects_only[3]),
'<Model2D_Deferred_field2_field3_field4_id_model2a_ptr_id_model2b_ptr_id: '
'<Model2D_Deferred_field2_field3_field4_model2a_ptr_id_model2b_ptr_id: '
'id 4, field1 (CharField), field2 (CharField), field3 (CharField), field4 (CharField)>')
# A bug in Django 1.4 prevents using defer across reverse relations