8000 Fixed #36292 -- Fixed crash when aggregating over a group mixing tran… · django/django@6dd48b8 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6dd48b8

Browse files
charettesgtossou
authored andcommitted
Fixed #36292 -- Fixed crash when aggregating over a group mixing transforms and references.
Regression in 65ad4ad. Refs #28900 Thanks Patrick Altman for the report.
1 parent 71b331c commit 6dd48b8

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

django/db/models/sql/query.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2339,6 +2339,9 @@ def set_group_by(self, allow_aliases=True):
23392339
self.append_annotation_mask(group_by_annotations)
23402340
self.select = tuple(values_select.values())
23412341
self.values_select = tuple(values_select)
2342+
if self.selected is not None:
2343+
for index, value_select in enumerate(values_select):
2344+
self.selected[value_select] = index
23422345
group_by = list(self.select)
23432346
for alias, annotation in self.annotation_select.items():
23442347
if not (group_by_cols := annotation.get_group_by_cols()):

docs/releases/5.2.1.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,6 @@ Django 5.2.1 fixes several bugs in 5.2.
99
Bugfixes
1010
========
1111

12-
* ...
12+
* Fixed a regression in Django 5.2 that caused a crash when annotating
13+
aggregate expressions over query that uses explicit grouping by transforms
14+
followed by field references (:ticket:`36292`).

tests/aggregation/tests.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2210,6 +2210,33 @@ def test_multiple_aggregate_references(self):
22102210
},
22112211
)
22122212

2213+
def test_group_by_transform_column(self):
2214+
self.assertSequenceEqual(
2215+
Store.objects.values(
2216+
"original_opening__date",
2217+
"name",
2218+
)
2219+
.annotate(Count("books"))
2220+
.order_by("name"),
2221+
[
2222+
{
2223+
"original_opening__date": datetime.date(1994, 4, 23),
2224+
"name": "Amazon.com",
2225+
"books__count": 6,
2226+
},
2227+
{
2228+
"original_opening__date": datetime.date(2001, 3, 15),
2229+
"name": "Books.com",
2230+
"books__count": 4,
2231+
},
2232+
{
2233+
"original_opening__date": datetime.date(1945, 4, 25),
2234+
"name": "Mamma and Pappa's Books",
2235+
"books__count": 3,
2236+
},
2237+
],
2238+
)
2239+
22132240
def test_group_by_reference_subquery(self):
22142241
author_qs = (
22152242
Author.objects.annotate(publisher_id=F("book__publisher"))

0 commit comments

Comments
 (0)
0