diff --git a/django/db/models/sql/aggregates.py b/django/db/models/sql/aggregates.py index 3cda4d244e..0e1794e0a9 100644 --- a/django/db/models/sql/aggregates.py +++ b/django/db/models/sql/aggregates.py @@ -79,7 +79,7 @@ class Aggregate(object): elif isinstance(self.col, (list, tuple)): field_name = '.'.join(qn(c) for c in self.col) else: - field_name = self.col + field_name = qn(self.col) substitutions = { 'function': self.sql_function, diff --git a/tests/aggregation_regress/tests.py b/tests/aggregation_regress/tests.py index b8ec14d1dc..741e2ed734 100644 --- a/tests/aggregation_regress/tests.py +++ b/tests/aggregation_regress/tests.py @@ -1114,3 +1114,13 @@ class AggregationTests(TestCase): self.assertQuerysetEqual( qs, ['Sams Teach Yourself Django in 24 Hours'], lambda b: b.name) + + def test_annotate_reserved_word(self): + """ + Regression #18333 - Ensure annotated column name is properly quoted. + """ + vals = Book.objects.annotate(select=Count('authors__id')).aggregate(Sum('select'), Avg('select')) + self.assertEqual(vals, { + 'select__sum': 10, + 'select__avg': Approximate(1.666, places=2), + })