From df7a65ac4ba36dd155e80b8bcfe607390976ad47 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Tue, 22 May 2012 20:26:46 +0200 Subject: [PATCH] Replaced 'next' testing by collections.Iterator testing. The new construct is also Python 3 compatible (where 'next' has been renamed to '__next__'). --- django/db/models/fields/__init__.py | 3 ++- django/db/models/sql/where.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) 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)