summaryrefslogtreecommitdiff
path: root/tests/annotations
diff options
context:
space:
mode:
authorChristian Klus <christianklus@gmail.com>2020-10-27 13:13:10 -0500
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-10-29 09:56:09 +0100
commit4ac2d4fa42e1659f328c35b6b8d4761b3419c11a (patch)
tree3c063ae382ae6c77a3e2064ccfa97f62fbd35583 /tests/annotations
parent9ca22c7733efeeb140b75585c6387ef2cb861d19 (diff)
downloaddjango-4ac2d4fa42e1659f328c35b6b8d4761b3419c11a.tar.gz
Fixed #32152 -- Fixed grouping by subquery aliases.
Regression in 42c08ee46539ef44f8658ebb1cbefb408e0d03fe. Thanks Simon Charette for the review.
Diffstat (limited to 'tests/annotations')
-rw-r--r--tests/annotations/tests.py21
1 files changed, 20 insertions, 1 deletions
diff --git a/tests/annotations/tests.py b/tests/annotations/tests.py
index 883c2c0ce0..5bd7d572df 100644
--- a/tests/annotations/tests.py
+++ b/tests/annotations/tests.py
@@ -9,7 +9,7 @@ from django.db.models import (
Subquery, Sum, Value, When,
)
from django.db.models.expressions import RawSQL
-from django.db.models.functions import Coalesce, Length, Lower
+from django.db.models.functions import Coalesce, ExtractYear, Length, Lower
from django.test import TestCase, skipUnlessDBFeature
from .models import (
@@ -658,6 +658,25 @@ class NonAggregateAnnotationTestCase(TestCase):
datetime.date(2008, 11, 3),
])
+ @skipUnlessDBFeature('supports_subqueries_in_group_by')
+ def test_annotation_subquery_and_aggregate_values_chaining(self):
+ qs = Book.objects.annotate(
+ pub_year=ExtractYear('pubdate')
+ ).values('pub_year').annotate(
+ top_rating=Subquery(
+ Book.objects.filter(
+ pubdate__year=OuterRef('pub_year')
+ ).order_by('-rating').values('rating')[:1]
+ ),
+ total_pages=Sum('pages'),
+ ).values('pub_year', 'total_pages', 'top_rating')
+ self.assertCountEqual(qs, [
+ {'pub_year': 1991, 'top_rating': 5.0, 'total_pages': 946},
+ {'pub_year': 1995, 'top_rating': 4.0, 'total_pages': 1132},
+ {'pub_year': 2007, 'top_rating': 4.5, 'total_pages': 447},
+ {'pub_year': 2008, 'top_rating': 4.0, 'total_pages': 1178},
+ ])
+
def test_annotation_aggregate_with_m2o(self):
if connection.vendor == 'mysql' and 'ONLY_FULL_GROUP_BY' in connection.sql_mode:
self.skipTest(