Commit 0456a8b9 authored by Tim Graham's avatar Tim Graham
Browse files

Fixed #26486 -- Fixed a select_related() + defer() MTI edge case.

parent c339a5a6
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -256,7 +256,6 @@ def select_related_descend(field, restricted, requested, load_fields, reverse=Fa
                                   " and traversed using select_related"
                                   " at the same time." %
                                   (field.model._meta.object_name, field.name))
            return False
    return True


+2 −3
Original line number Diff line number Diff line
@@ -128,9 +128,8 @@ class DeferTests(AssertionMixin, TestCase):
            Primary.objects.only("name").select_related("related")[0]

    def test_defer_foreign_keys_are_deferred_and_not_traversed(self):
        # With a depth-based select_related, all deferred ForeignKeys are
        # deferred instead of traversed.
        with self.assertNumQueries(3):
        # select_related() overrides defer().
        with self.assertNumQueries(1):
            obj = Primary.objects.defer("related").select_related()[0]
            self.assert_delayed(obj, 1)
            self.assertEqual(obj.related.id, self.s1.pk)
+2 −7
Original line number Diff line number Diff line
from __future__ import unicode_literals

import unittest

from django.core.exceptions import FieldError
from django.test import SimpleTestCase, TestCase

@@ -175,7 +173,6 @@ class ReverseSelectRelatedTestCase(TestCase):
            self.assertEqual(p.child1.child4.value, p.child1.value)
            self.assertEqual(p.child1.child4.value4, 4)

    @unittest.expectedFailure
    def test_inheritance_deferred(self):
        c = Child4.objects.create(name1='n1', name2='n2', value=1, value4=4)
        with self.assertNumQueries(1):
@@ -192,10 +189,9 @@ class ReverseSelectRelatedTestCase(TestCase):
        with self.assertNumQueries(1):
            self.assertEqual(p.child1.name2, 'n2')

    @unittest.expectedFailure
    def test_inheritance_deferred2(self):
        c = Child4.objects.create(name1='n1', name2='n2', value=1, value4=4)
        qs = Parent2.objects.select_related('child1', 'child4').only(
        qs = Parent2.objects.select_related('child1', 'child1__child4').only(
            'id2', 'child1__value', 'child1__child4__value4')
        with self.assertNumQueries(1):
            p = qs.get(name2="n2")
@@ -207,9 +203,8 @@ class ReverseSelectRelatedTestCase(TestCase):
        with self.assertNumQueries(1):
            self.assertEqual(p.child1.name2, 'n2')
        p = qs.get(name2="n2")
        with self.assertNumQueries(1):
        with self.assertNumQueries(0):
            self.assertEqual(p.child1.name1, 'n1')
        with self.assertNumQueries(1):
            self.assertEqual(p.child1.child4.name1, 'n1')