Fix deferred loading of 'pk' field
parent
46e41a6c1c
commit
88bb23b506
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue