Loading django/db/models/sql/query.py +1 −1 Original line number Diff line number Diff line Loading @@ -585,7 +585,7 @@ class Query(object): must_include = {orig_opts.concrete_model: set([orig_opts.pk])} for field_name in field_names: parts = field_name.split(LOOKUP_SEP) cur_model = self.model cur_model = self.model._meta.concrete_model opts = orig_opts for name in parts[:-1]: old_model = cur_model Loading tests/defer_regress/models.py +5 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,11 @@ class RelatedItem(models.Model): item = models.ForeignKey(Item) class ProxyRelated(RelatedItem): class Meta: proxy = True class Child(models.Model): name = models.CharField(max_length=10) value = models.IntegerField() Loading tests/defer_regress/tests.py +14 −1 Original line number Diff line number Diff line Loading @@ -10,7 +10,9 @@ from django.test import TestCase, override_settings from .models import ( ResolveThis, Item, RelatedItem, Child, Leaf, Proxy, SimpleItem, Feature, ItemAndSimpleItem, OneToOneItem, SpecialFeature, Location, Request) ItemAndSimpleItem, OneToOneItem, SpecialFeature, Location, Request, ProxyRelated, ) class DeferRegressionTest(TestCase): Loading Loading @@ -207,6 +209,17 @@ class DeferRegressionTest(TestCase): self.assertEqual(obj.item, item2) self.assertEqual(obj.item_id, item2.id) def test_proxy_model_defer_with_selected_related(self): # Regression for #22050 item = Item.objects.create(name="first", value=47) related = RelatedItem.objects.create(item=item) # Defer fields with only() obj = ProxyRelated.objects.all().select_related().only('item__name')[0] with self.assertNumQueries(0): self.assertEqual(obj.item.name, "first") with self.assertNumQueries(1): self.assertEqual(obj.item.value, 47) def test_only_with_select_related(self): # Test for #17485. item = SimpleItem.objects.create(name='first', value=47) Loading Loading
django/db/models/sql/query.py +1 −1 Original line number Diff line number Diff line Loading @@ -585,7 +585,7 @@ class Query(object): must_include = {orig_opts.concrete_model: set([orig_opts.pk])} for field_name in field_names: parts = field_name.split(LOOKUP_SEP) cur_model = self.model cur_model = self.model._meta.concrete_model opts = orig_opts for name in parts[:-1]: old_model = cur_model Loading
tests/defer_regress/models.py +5 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,11 @@ class RelatedItem(models.Model): item = models.ForeignKey(Item) class ProxyRelated(RelatedItem): class Meta: proxy = True class Child(models.Model): name = models.CharField(max_length=10) value = models.IntegerField() Loading
tests/defer_regress/tests.py +14 −1 Original line number Diff line number Diff line Loading @@ -10,7 +10,9 @@ from django.test import TestCase, override_settings from .models import ( ResolveThis, Item, RelatedItem, Child, Leaf, Proxy, SimpleItem, Feature, ItemAndSimpleItem, OneToOneItem, SpecialFeature, Location, Request) ItemAndSimpleItem, OneToOneItem, SpecialFeature, Location, Request, ProxyRelated, ) class DeferRegressionTest(TestCase): Loading Loading @@ -207,6 +209,17 @@ class DeferRegressionTest(TestCase): self.assertEqual(obj.item, item2) self.assertEqual(obj.item_id, item2.id) def test_proxy_model_defer_with_selected_related(self): # Regression for #22050 item = Item.objects.create(name="first", value=47) related = RelatedItem.objects.create(item=item) # Defer fields with only() obj = ProxyRelated.objects.all().select_related().only('item__name')[0] with self.assertNumQueries(0): self.assertEqual(obj.item.name, "first") with self.assertNumQueries(1): self.assertEqual(obj.item.value, 47) def test_only_with_select_related(self): # Test for #17485. item = SimpleItem.objects.create(name='first', value=47) Loading