diff options
Diffstat (limited to 'tests/aggregation')
| -rw-r--r-- | tests/aggregation/tests.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/aggregation/tests.py b/tests/aggregation/tests.py index b01df88109..bedc2730a2 100644 --- a/tests/aggregation/tests.py +++ b/tests/aggregation/tests.py @@ -25,6 +25,7 @@ from django.db.models import ( Subquery, Sum, TimeField, + Transform, Value, Variance, When, @@ -1727,6 +1728,28 @@ class AggregateTestCase(TestCase): ordered=False, ) + def test_order_by_aggregate_transform(self): + class Mod100(Mod, Transform): + def __init__(self, expr): + super().__init__(expr, 100) + + sum_field = IntegerField() + sum_field.register_instance_lookup(Mod100, "mod100") + publisher_pages = ( + Book.objects.values("publisher") + .annotate(sum_pages=Sum("pages", output_field=sum_field)) + .order_by("sum_pages__mod100") + ) + self.assertQuerySetEqual( + publisher_pages, + [ + {"publisher": self.p2.id, "sum_pages": 528}, + {"publisher": self.p4.id, "sum_pages": 946}, + {"publisher": self.p1.id, "sum_pages": 747}, + {"publisher": self.p3.id, "sum_pages": 1482}, + ], + ) + def test_empty_result_optimization(self): with self.assertNumQueries(0): self.assertEqual( |
