Django

Code

Changeset 7343

Show
Ignore:
Timestamp:
03/21/08 06:42:00 (6 months ago)
Author:
mtredinnick
Message:

queryset-refactor: Added support for cross-relation values() queries when
extra(select=...) was present (previously, it only worked without extra()).
Also, better error reporting for values() queries with bad field names.

Files:

Legend:

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

    r7342 r7343  
    509509            else: 
    510510                field_names = [] 
    511                 names = set(self.model._meta.get_all_field_names()) 
    512511                for f in self._fields: 
    513                     if f in names: 
    514                         field_names.append(f) 
    515                     elif self.query.extra_select.has_key(f): 
     512                    if self.query.extra_select.has_key(f): 
    516513                        self.extra_names.append(f) 
    517514                    else: 
    518                         raise FieldDoesNotExist('%s has no field named %r' 
    519                                 % (self.model._meta.object_name, f)) 
     515                        field_names.append(f) 
    520516        else: 
    521517            # Default to all fields. 
  • django/branches/queryset-refactor/django/db/models/sql/query.py

    r7340 r7343  
    11921192        except MultiJoin: 
    11931193            raise FieldError("Invalid field name: '%s'" % name) 
     1194        except FieldError: 
     1195            names = opts.get_all_field_names() + self.extra_select.keys() 
     1196            names.sort() 
     1197            raise FieldError("Cannot resolve keyword %r into field. " 
     1198                    "Choices are: %s" % (name, ", ".join(names))) 
    11941199 
    11951200    def add_ordering(self, *ordering): 
  • django/branches/queryset-refactor/tests/modeltests/lookup/models.py

    r7341 r7343  
    163163Traceback (most recent call last): 
    164164    ... 
    165 FieldDoesNotExist: Article has no field named 'id_plus_two' 
     165FieldError: Cannot resolve keyword 'id_plus_two' into field. Choices are: headline, id, id_plus_one, pub_date 
    166166 
    167167# If you don't specify field names to values(), all are returned.