diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/aggregation/test_filter_argument.py | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/tests/aggregation/test_filter_argument.py b/tests/aggregation/test_filter_argument.py index 0c8829efdf..650cb8e460 100644 --- a/tests/aggregation/test_filter_argument.py +++ b/tests/aggregation/test_filter_argument.py @@ -2,7 +2,8 @@ import datetime from decimal import Decimal from django.db.models import ( - Avg, Case, Count, F, OuterRef, Q, StdDev, Subquery, Sum, Variance, When, + Avg, Case, Count, Exists, F, Max, OuterRef, Q, StdDev, Subquery, Sum, + Variance, When, ) from django.test import TestCase from django.test.utils import Approximate @@ -120,3 +121,23 @@ class FilteredAggregateTests(TestCase): cnt=Count('pk', filter=Q(earliest_book_year=2008)), ) self.assertEqual(aggs['cnt'], 2) + + def test_filtered_aggregate_ref_multiple_subquery_annotation(self): + aggregate = Book.objects.values('publisher').annotate( + has_authors=Exists( + Book.authors.through.objects.filter(book=OuterRef('pk')), + ), + authors_have_other_books=Exists( + Book.objects.filter( + authors__in=Author.objects.filter( + book_contact_set=OuterRef(OuterRef('pk')), + ) + ).exclude(pk=OuterRef('pk')), + ), + ).aggregate( + max_rating=Max( + 'rating', + filter=Q(has_authors=True, authors_have_other_books=False), + ) + ) + self.assertEqual(aggregate, {'max_rating': 4.5}) |
