Commit 9c2d8cde authored by Aric Coady's avatar Aric Coady Committed by Tim Graham
Browse files

Fixed #24719 -- Restored the ability to use interators as queryset related object filters.

parent eaeea6f9
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@ all about the internals of models in order to get the information it needs.
"""
import copy
import warnings
from collections import Mapping, OrderedDict
from collections import Iterator, Mapping, OrderedDict
from itertools import chain, count, product
from string import ascii_uppercase

@@ -1148,6 +1148,9 @@ class Query(object):
            field, sources, opts, join_list, path = self.setup_joins(
                parts, opts, alias, can_reuse=can_reuse, allow_many=allow_many)

            # Prevent iterator from being consumed by check_related_objects()
            if isinstance(value, Iterator):
                value = list(value)
            self.check_related_objects(field, value, opts)

            # split_exclude() needs to know which joins were generated for the
+3 −0
Original line number Diff line number Diff line
@@ -69,6 +69,9 @@ Bugfixes
* Fixed a migration crash when applying migrations with model managers on
  Python 3 that were generated on Python 2 (:ticket:`24701`).

* Restored the ability to use interators as queryset filter arguments
  (:ticket:`24719`).

Optimizations
=============

+1 −0
Original line number Diff line number Diff line
@@ -3502,6 +3502,7 @@ class RelatedLookupTypeTests(TestCase):
        # child objects
        self.assertQuerysetEqual(ObjectB.objects.filter(objecta__in=[self.coa]), [])
        self.assertQuerysetEqual(ObjectB.objects.filter(objecta__in=[self.poa, self.coa]).order_by('name'), out_b)
        self.assertQuerysetEqual(ObjectB.objects.filter(objecta__in=iter([self.poa, self.coa])).order_by('name'), out_b)

        # parent objects
        self.assertQuerysetEqual(ObjectC.objects.exclude(childobjecta=self.oa), out_c)