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.
This commit is contained in:
parent
aeda55e6bf
commit
fcad6c48f0
|
@ -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
|
||||||
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):
|
||||||
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')
|
||||||
|
|
Loading…
Reference in New Issue