Changeset 6762
- Timestamp:
- 11/29/07 22:44:32 (1 year ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/queryset-refactor/django/db/models/sql/query.py
r6760 r6762 693 693 alias = self.join((None, opts.db_table, None, None)) 694 694 695 field, target, unused, join_list, nullable = self.setup_joins(parts, 696 opts, alias, (connection == AND)) 695 try: 696 field, target, unused, join_list, nullable = self.setup_joins(parts, 697 opts, alias, (connection == AND)) 698 except TypeError, e: 699 if len(parts) != 1 or parts[0] not in self.extra_select: 700 raise e 701 # Filtering on some alias from extra(select=...) 702 self.where.add([None, parts[0], None, lookup_type, value], 703 connection) 704 return 697 705 col = target.column 698 706 alias = join_list[-1][-1] django/branches/queryset-refactor/django/db/models/sql/where.py
r6730 r6762 6 6 from django.utils import tree 7 7 from django.db import connection 8 from django.db.models.fields import Field 8 9 from datastructures import EmptyResultSet 9 10 … … 97 98 format = '%s %s' 98 99 99 params = field.get_db_prep_lookup(lookup_type, value) 100 if field: 101 params = field.get_db_prep_lookup(lookup_type, value) 102 else: 103 params = Field().get_db_prep_lookup(lookup_type, value) 100 104 101 105 if lookup_type in connection.operators: django/branches/queryset-refactor/tests/regressiontests/queries/models.py
r6730 r6762 405 405 >>> Item.objects.extra(select=SortedDict(s), params=params).values('a','b')[0] 406 406 {'a': u'one', 'b': u'two'} 407 408 Bug #4002 409 Attributes used in extra(select=...) are available for use in subsequent 410 order_by() and filter() calls. 411 412 # Order by the number of tags attached to an item. 413 >>> l = Item.objects.extra(select={'count': 'select count(*) from queries_item_tags where queries_item_tags.item_id = queries_item.id'}).order_by('-count') 414 >>> [o.count for o in l] 415 [2, 2, 1, 0] 416 417 # Filter those items that have exactly one tag attacjed. 418 >>> Item.objects.extra(select={'count': 'select count(*) from queries_item_tags where queries_item_tags.item_id = queries_item.id'}).filter(count=1) 419 [<Item: four>] 407 420 """} 408 421
