mirror of
https://github.com/django/django.git
synced 2025-10-23 21:59:11 +00:00
Fixed #34013 -- Added QuerySet.order_by() support for annotation transforms.
Thanks Eugene Morozov and Ben Nace for the reports.
This commit is contained in:
committed by
Mariusz Felisiak
parent
fcf95e5927
commit
b0ad41198b
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user