Django

Code

Changeset 7235

Show
Ignore:
Timestamp:
03/13/08 06:48:25 (8 months ago)
Author:
mtredinnick
Message:

queryset-refactor: Changed the return type of an internal function.
Previous polymorphic return type was dumb.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/queryset-refactor/django/db/models/query.py

    r7232 r7235  
    507507            field_names = [f.attname for f in self.model._meta.fields] 
    508508 
    509         self.query.add_fields(field_names
     509        self.query.add_fields(field_names, False
    510510        self.query.default_cols = False 
    511511        self.field_names = field_names 
  • django/branches/queryset-refactor/django/db/models/sql/datastructures.py

    r7164 r7235  
    99class FullResultSet(Exception): 
    1010    pass 
     11 
     12class JoinError(Exception): 
     13    def __init__(self, level): 
     14        self.level = level 
    1115 
    1216class Empty(object): 
  • django/branches/queryset-refactor/django/db/models/sql/query.py

    r7231 r7235  
    1818from django.db.models.fields import FieldDoesNotExist 
    1919from django.core.exceptions import FieldError 
    20 from datastructures import EmptyResultSet, Empty 
     20from datastructures import EmptyResultSet, Empty, JoinError 
    2121from constants import * 
    2222 
     
    508508        if not alias: 
    509509            alias = self.get_initial_alias() 
    510         result = self.setup_joins(pieces, opts, alias, False, False) 
    511         if isinstance(result, int): 
     510        try: 
     511            field, target, opts, joins = self.setup_joins(pieces, opts, alias, 
     512                    False, False) 
     513        except JoinError: 
    512514            raise FieldError("Cannot order by many-valued field: '%s'" % name) 
    513         field, target, opts, joins = result 
    514515        alias = joins[-1][-1] 
    515516        col = target.column 
     
    813814        allow_many = trim or not negate 
    814815 
    815         result = self.setup_joins(parts, opts, alias, (connector == AND), 
    816                 allow_many) 
    817         if isinstance(result, int): 
    818             self.split_exclude(filter_expr, LOOKUP_SEP.join(parts[:result])) 
     816        try: 
     817            field, target, opts, join_list = self.setup_joins(parts, opts, 
     818                    alias, (connector == AND), allow_many) 
     819        except JoinError, e: 
     820            self.split_exclude(filter_expr, LOOKUP_SEP.join(parts[:e.level])) 
    819821            return 
    820         field, target, opts, join_list = result 
    821822        if trim and len(join_list) > 1: 
    822823            extra = join_list[-1] 
     
    973974                    for alias in join: 
    974975                        self.unref_alias(alias) 
    975                 return pos + 1 
     976                raise JoinError(pos + 1) 
    976977            if model: 
    977978                # The field lives on a base class of the current model. 
     
    11291130        return not (self.low_mark or self.high_mark) 
    11301131 
    1131     def add_fields(self, field_names): 
     1132    def add_fields(self, field_names, allow_m2m=True): 
    11321133        """ 
    11331134        Adds the given (model) fields to the select set. The field names are 
     
    11361137        alias = self.get_initial_alias() 
    11371138        opts = self.get_meta() 
    1138         for name in field_names: 
    1139             u1, target, u2, joins = self.setup_joins(name.split(LOOKUP_SEP), 
    1140                     opts, alias, False, False, True) 
    1141             self.select.append((joins[-1][-1], target.column)) 
     1139        try: 
     1140            for name in field_names: 
     1141                u1, target, u2, joins = self.setup_joins(name.split(LOOKUP_SEP), 
     1142                        opts, alias, False, allow_m2m, True) 
     1143                self.select.append((joins[-1][-1], target.column)) 
     1144        except JoinError: 
     1145            raise FieldError("Invalid field name: '%s'" % name) 
    11421146 
    11431147    def add_ordering(self, *ordering):