Commit fcad6c48 authored by Anssi Kääriäinen's avatar Anssi Kääriäinen
Browse files

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.
parent aeda55e6
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -1655,8 +1655,13 @@ class Query(object):
        except MultiJoin:
            raise FieldError("Invalid field name: '%s'" % name)
        except FieldError:
            names = opts.get_all_field_names() + self.extra.keys() + self.aggregate_select.keys()
            names.sort()
            if name.find(LOOKUP_SEP) != -1:
                # For lookups spanning over relationships, show the error
                # from the model on which the lookup failed.
                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()
+13 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@ from __future__ import absolute_import
from copy import deepcopy
from datetime import datetime

from django.core.exceptions import MultipleObjectsReturned
from django.core.exceptions import MultipleObjectsReturned, FieldError
from django.test import TestCase
from django.utils.translation import ugettext_lazy

@@ -424,3 +424,15 @@ class ManyToOneTests(TestCase):
        notlazy = unicode(lazy)
        article = reporter.article_set.get()
        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')