From 33ec01caaf57271d1820dc0ea90c5360287e305c Mon Sep 17 00:00:00 2001 From: Christopher G Johnson Date: Tue, 21 Jan 2020 10:29:54 +0100 Subject: [PATCH] Refs #29095 -- Added test for using QuerySet.count() with window expressions ordered by related fields. Fixed in 3f32154f40a855afa063095e3d091ce6be21f2c5. --- tests/expressions_window/models.py | 5 +++++ tests/expressions_window/tests.py | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/tests/expressions_window/models.py b/tests/expressions_window/models.py index d6bb27644f..d479d1aea6 100644 --- a/tests/expressions_window/models.py +++ b/tests/expressions_window/models.py @@ -1,12 +1,17 @@ from django.db import models +class Classification(models.Model): + code = models.CharField(max_length=10) + + class Employee(models.Model): name = models.CharField(max_length=40, blank=False, null=False) salary = models.PositiveIntegerField() department = models.CharField(max_length=40, blank=False, null=False) hire_date = models.DateField(blank=False, null=False) age = models.IntegerField(blank=False, null=False) + classification = models.ForeignKey('Classification', on_delete=models.CASCADE, null=True) def __str__(self): return '{}, {}, {}, {}'.format(self.name, self.department, self.salary, self.hire_date) diff --git a/tests/expressions_window/tests.py b/tests/expressions_window/tests.py index 37b0e95247..686594584f 100644 --- a/tests/expressions_window/tests.py +++ b/tests/expressions_window/tests.py @@ -537,6 +537,14 @@ class WindowFunctionTests(TestCase): ('Brown', 53000, 'Sales', datetime.date(2009, 9, 1), 108000), ], transform=lambda row: (row.name, row.salary, row.department, row.hire_date, row.sum)) + def test_related_ordering_with_count(self): + qs = Employee.objects.annotate(department_sum=Window( + expression=Sum('salary'), + partition_by=F('department'), + order_by=['classification__code'], + )) + self.assertEqual(qs.count(), 12) + @skipUnlessDBFeature('supports_frame_range_fixed_distance') def test_range_n_preceding_and_following(self): qs = Employee.objects.annotate(sum=Window(