Commit 700c5a3d authored by Carl Meyer's avatar Carl Meyer
Browse files

[1.2.X] Refs #11256 -- Extended the annotation field name conflict check to...

[1.2.X] Refs #11256 -- Extended the annotation field name conflict check to cover m2ms and reverse related descriptors as well. This is needed to actually cover the case raised by #14373. Backport of [14116].

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14117 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 4395b657
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -625,7 +625,7 @@ class QuerySet(object):
                                 % arg.default_alias)
            kwargs[arg.default_alias] = arg

        names = set([f.name for f in self.model._meta.fields])
        names = set(self.model._meta.get_all_field_names())
        for aggregate in kwargs:
            if aggregate in names:
                raise ValueError("The %s annotation conflicts with a field on "
+8 −0
Original line number Diff line number Diff line
@@ -489,6 +489,14 @@ class AggregationTests(TestCase):
        # Regression for #11256 - providing an aggregate name that conflicts with a field name on the model raises ValueError
        self.assertRaises(ValueError, Author.objects.annotate, age=Avg('friends__age'))

    def test_m2m_name_conflict(self):
        # Regression for #11256 - providing an aggregate name that conflicts with an m2m name on the model raises ValueError
        self.assertRaises(ValueError, Author.objects.annotate, friends=Count('friends'))

    def test_reverse_relation_name_conflict(self):
        # Regression for #11256 - providing an aggregate name that conflicts with a reverse-related name on the model raises ValueError
        self.assertRaises(ValueError, Author.objects.annotate, book_contact_set=Avg('friends__age'))

    def test_pickle(self):
        # Regression for #10197 -- Queries with aggregates can be pickled.
        # First check that pickling is possible at all. No crash = success