Fixed #20577 -- Deferred filtering of prefetched related querysets.

Added internal interface to QuerySet that allows to defer next filter
call till .query is accessed. Used it to optimize prefetch_related().

Thanks Simon Charette for the review.
This commit is contained in:
Alex Aktsipetrov 2019-10-15 01:59:43 +03:00 committed by Mariusz Felisiak
parent 70d8146986
commit 681f7e2b13
5 changed files with 64 additions and 4 deletions

View file

@ -212,6 +212,12 @@ class PickleabilityTestCase(TestCase):
qs = Happening.objects.annotate(latest_time=models.Max('when'))
self.assert_pickles(qs)
def test_filter_deferred(self):
qs = Happening.objects.all()
qs._defer_next_filter = True
qs = qs.filter(id=0)
self.assert_pickles(qs)
def test_missing_django_version_unpickling(self):
"""
#21430 -- Verifies a warning is raised for querysets that are