Kaydet (Commit) fcad6c48 authored tarafından Anssi Kääriäinen's avatar Anssi Kääriäinen

Fixed #17497 -- Corrected FieldError message in add_fields()

The erroneous message was user visible in values_list() calls.

Thanks to ojii for report and review, and to antoviaque for the patch.
üst aeda55e6
...@@ -1655,10 +1655,15 @@ class Query(object): ...@@ -1655,10 +1655,15 @@ class Query(object):
except MultiJoin: except MultiJoin:
raise FieldError("Invalid field name: '%s'" % name) raise FieldError("Invalid field name: '%s'" % name)
except FieldError: except FieldError:
names = opts.get_all_field_names() + self.extra.keys() + self.aggregate_select.keys() if name.find(LOOKUP_SEP) != -1:
names.sort() # For lookups spanning over relationships, show the error
raise FieldError("Cannot resolve keyword %r into field. " # from the model on which the lookup failed.
"Choices are: %s" % (name, ", ".join(names))) raise
else:
names = sorted(opts.get_all_field_names() + self.extra.keys()
+ self.aggregate_select.keys())
raise FieldError("Cannot resolve keyword %r into field. "
"Choices are: %s" % (name, ", ".join(names)))
self.remove_inherited_models() self.remove_inherited_models()
def add_ordering(self, *ordering): def add_ordering(self, *ordering):
......
...@@ -3,7 +3,7 @@ from __future__ import absolute_import ...@@ -3,7 +3,7 @@ from __future__ import absolute_import
from copy import deepcopy from copy import deepcopy
from datetime import datetime from datetime import datetime
from django.core.exceptions import MultipleObjectsReturned from django.core.exceptions import MultipleObjectsReturned, FieldError
from django.test import TestCase from django.test import TestCase
from django.utils.translation import ugettext_lazy from django.utils.translation import ugettext_lazy
...@@ -424,3 +424,15 @@ class ManyToOneTests(TestCase): ...@@ -424,3 +424,15 @@ class ManyToOneTests(TestCase):
notlazy = unicode(lazy) notlazy = unicode(lazy)
article = reporter.article_set.get() article = reporter.article_set.get()
self.assertEqual(article.headline, notlazy) self.assertEqual(article.headline, notlazy)
def test_values_list_exception(self):
expected_message = "Cannot resolve keyword 'notafield' into field. Choices are: %s"
self.assertRaisesMessage(FieldError,
expected_message % ', '.join(Reporter._meta.get_all_field_names()),
Article.objects.values_list,
'reporter__notafield')
self.assertRaisesMessage(FieldError,
expected_message % ', '.join(['EXTRA',] + Article._meta.get_all_field_names()),
Article.objects.extra(select={'EXTRA': 'EXTRA_SELECT'}).values_list,
'notafield')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment