diff options
| author | Aric Coady <aric.coady@gmail.com> | 2015-04-27 15:23:56 -0700 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-04-28 10:51:27 -0400 |
| commit | 9c2d8cde77ee6edd407e92f93eacd4624290394f (patch) | |
| tree | 8d699d9ac2ab6580439c62a9b7dbcb6bd5f7f87d | |
| parent | eaeea6f94701547ce1b50dbcf5cf71460e9e4c91 (diff) | |
Fixed #24719 -- Restored the ability to use interators as queryset related object filters.
| -rw-r--r-- | django/db/models/sql/query.py | 5 | ||||
| -rw-r--r-- | docs/releases/1.8.1.txt | 3 | ||||
| -rw-r--r-- | tests/queries/tests.py | 1 |
3 files changed, 8 insertions, 1 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index b514cc4783..d84e3aa681 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -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 diff --git a/docs/releases/1.8.1.txt b/docs/releases/1.8.1.txt index 9593c13551..6f668231fd 100644 --- a/docs/releases/1.8.1.txt +++ b/docs/releases/1.8.1.txt @@ -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 ============= diff --git a/tests/queries/tests.py b/tests/queries/tests.py index b4ea646fde..71c32c6bda 100644 --- a/tests/queries/tests.py +++ b/tests/queries/tests.py @@ -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) |
