diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index 35dfbcb12f..2f7a08e4dd 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -723,16 +723,8 @@ class Query(object): opts = self.model._meta alias = self.join((None, opts.db_table, None, None)) - try: - field, target, unused, join_list = self.setup_joins(parts, opts, - alias, (connector == AND)) - except TypeError, e: - if len(parts) != 1 or parts[0] not in self.extra_select: - raise e - # Filtering on some alias from extra(select=...) - self.where.add([None, parts[0], None, lookup_type, value], - connector) - return + field, target, unused, join_list, = self.setup_joins(parts, opts, + alias, (connector == AND)) col = target.column alias = join_list[-1][-1] diff --git a/django/db/models/sql/where.py b/django/db/models/sql/where.py index 97e6c38e6b..d361916953 100644 --- a/django/db/models/sql/where.py +++ b/django/db/models/sql/where.py @@ -5,7 +5,6 @@ import datetime from django.utils import tree from django.db import connection -from django.db.models.fields import Field from datastructures import EmptyResultSet # Connection types @@ -103,10 +102,7 @@ class WhereNode(tree.Node): else: format = '%s %s' - if field: - params = field.get_db_prep_lookup(lookup_type, value) - else: - params = Field().get_db_prep_lookup(lookup_type, value) + params = field.get_db_prep_lookup(lookup_type, value) if lookup_type in connection.operators: return (format % (field_sql, diff --git a/tests/regressiontests/queries/models.py b/tests/regressiontests/queries/models.py index e7e78e23cd..0404e9f9be 100644 --- a/tests/regressiontests/queries/models.py +++ b/tests/regressiontests/queries/models.py @@ -458,19 +458,11 @@ thus fail.) >>> Item.objects.extra(select=SortedDict(s), params=params).values('a','b')[0] {'a': u'one', 'b': u'two'} -Bug #4002 -Attributes used in extra(select=...) are available for use in subsequent -order_by() and filter() calls. - # Order by the number of tags attached to an item. >>> l = Item.objects.extra(select={'count': 'select count(*) from queries_item_tags where queries_item_tags.item_id = queries_item.id'}).order_by('-count') >>> [o.count for o in l] [2, 2, 1, 0] -# Filter those items that have exactly one tag attached. ->>> Item.objects.extra(select={'count': 'select count(*) from queries_item_tags where queries_item_tags.item_id = queries_item.id'}).filter(count=1) -[] - Bug #6154 Multiple filter statements are joined using "AND" all the time.