diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index f694958692..50976db339 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -1,3 +1,4 @@ +import collections import copy import datetime import decimal @@ -436,7 +437,7 @@ class Field(object): return bound_field_class(self, fieldmapping, original) def _get_choices(self): - if hasattr(self._choices, 'next'): + if isinstance(self._choices, collections.Iterator): choices, self._choices = tee(self._choices) return choices else: diff --git a/django/db/models/sql/where.py b/django/db/models/sql/where.py index 0bc3638b80..5515bc4f83 100644 --- a/django/db/models/sql/where.py +++ b/django/db/models/sql/where.py @@ -4,6 +4,7 @@ Code to manage the creation and SQL rendering of 'where' constraints. from __future__ import absolute_import +import collections import datetime from itertools import repeat @@ -49,7 +50,7 @@ class WhereNode(tree.Node): return obj, lookup_type, value = data - if hasattr(value, '__iter__') and hasattr(value, 'next'): + if isinstance(value, collections.Iterator): # Consume any generators immediately, so that we can determine # emptiness and transform any non-empty values correctly. value = list(value)