mirror of
https://github.com/django/django.git
synced 2025-07-05 18:29:11 +00:00
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. git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@7343 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
e401ff8ff8
commit
7388d01680
@ -508,15 +508,11 @@ class ValuesQuerySet(QuerySet):
|
||||
field_names = list(self._fields)
|
||||
else:
|
||||
field_names = []
|
||||
names = set(self.model._meta.get_all_field_names())
|
||||
for f in self._fields:
|
||||
if f in names:
|
||||
field_names.append(f)
|
||||
elif self.query.extra_select.has_key(f):
|
||||
if self.query.extra_select.has_key(f):
|
||||
self.extra_names.append(f)
|
||||
else:
|
||||
raise FieldDoesNotExist('%s has no field named %r'
|
||||
% (self.model._meta.object_name, f))
|
||||
field_names.append(f)
|
||||
else:
|
||||
# Default to all fields.
|
||||
field_names = [f.attname for f in self.model._meta.fields]
|
||||
|
@ -1191,6 +1191,11 @@ class Query(object):
|
||||
self.select.append((final_alias, col))
|
||||
except MultiJoin:
|
||||
raise FieldError("Invalid field name: '%s'" % name)
|
||||
except FieldError:
|
||||
names = opts.get_all_field_names() + self.extra_select.keys()
|
||||
names.sort()
|
||||
raise FieldError("Cannot resolve keyword %r into field. "
|
||||
"Choices are: %s" % (name, ", ".join(names)))
|
||||
|
||||
def add_ordering(self, *ordering):
|
||||
"""
|
||||
|
@ -162,7 +162,7 @@ True
|
||||
>>> Article.objects.extra(select={'id_plus_one': 'id + 1'}).values('id', 'id_plus_two')
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
FieldDoesNotExist: Article has no field named 'id_plus_two'
|
||||
FieldError: Cannot resolve keyword 'id_plus_two' into field. Choices are: headline, id, id_plus_one, pub_date
|
||||
|
||||
# If you don't specify field names to values(), all are returned.
|
||||
>>> list(Article.objects.filter(id=5).values()) == [{'id': 5, 'headline': 'Article 5', 'pub_date': datetime(2005, 8, 1, 9, 0)}]
|
||||
|
Loading…
x
Reference in New Issue
Block a user