Commit 5b0375ec authored by Josh Smeaton's avatar Josh Smeaton Committed by Anssi Kääriäinen
Browse files

Fixed #23001 -- Fixed mixing defer and annotations

parent 954e7b8a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -260,7 +260,7 @@ class QuerySet(object):
                    load_fields.append(field.name)

        skip = None
        if load_fields and not fill_cache:
        if load_fields:
            # Some fields have been deferred, so we have to initialize
            # via keyword arguments.
            skip = set()
+25 −0
Original line number Diff line number Diff line
@@ -88,6 +88,31 @@ class BaseAggregateTestCase(TestCase):
        )
        self.assertEqual(b.mean_age, 34.5)

    def test_annotate_defer(self):
        qs = Book.objects.annotate(
            page_sum=Sum("pages")).defer('name').filter(pk=1)

        rows = [
            (1, "159059725", 447, "The Definitive Guide to Django: Web Development Done Right")
        ]
        self.assertQuerysetEqual(
            qs.order_by('pk'), rows,
            lambda r: (r.id, r.isbn, r.page_sum, r.name)
        )

    def test_annotate_defer_select_related(self):
        qs = Book.objects.select_related('contact').annotate(
            page_sum=Sum("pages")).defer('name').filter(pk=1)

        rows = [
            (1, "159059725", 447, "Adrian Holovaty",
             "The Definitive Guide to Django: Web Development Done Right")
        ]
        self.assertQuerysetEqual(
            qs.order_by('pk'), rows,
            lambda r: (r.id, r.isbn, r.page_sum, r.contact.name, r.name)
        )

    def test_annotate_m2m(self):
        books = Book.objects.filter(rating__lt=4.5).annotate(Avg("authors__age")).order_by("name")
        self.assertQuerysetEqual(