Opened 6 years ago
Last modified 6 years ago
#31217 closed Bug
QuerySet.values()/values_list() with ordering by annotations with related fields and aggregations crashes. — at Version 3
| Reported by: | Mariusz Felisiak | Owned by: | Mariusz Felisiak |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 3.0 |
| Severity: | Release blocker | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
QuerySet.values()/values_list() with ordering by annotations with related fields and aggregations crashes, e.g.
def test_aggregation_ordered_by_related_annotation_values(self):
from django.db.models.functions import Coalesce
self.assertEqual(
list(Book.objects.annotate(
min_age=Min('authors__age'),
).annotate(
min_related_age=Coalesce('min_age', 'contact__age'),
).order_by('min_related_age').values_list('pk', flat=True)),
[self.b4.pk, self.b3.pk, self.b1.pk, self.b2.pk, self.b5.pk, self.b6.pk],
)
crashes with:
django.db.utils.ProgrammingError: column "t4.age" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ...ER BY COALESCE(COUNT("aggregation_author"."age"), T4."age") ...
Regression in 59b4e99dd00b9c36d56055b889f96885995e4240.
The query before:
....
GROUP BY "aggregation_book"."id", T4."age" ORDER BY COALESCE(MIN("aggregation_author"."age"), T4."age") ASC
and after 59b4e99dd00b9c36d56055b889f96885995e4240
...
GROUP BY "aggregation_book"."id" ORDER BY COALESCE(MIN("aggregation_author"."age"), T4."age") ASC
Thanks Jon Dufresne for the report.
Change History (3)
comment:1 by , 6 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:2 by , 6 years ago
| Description: | modified (diff) |
|---|
comment:3 by , 6 years ago
| Description: | modified (diff) |
|---|
Note:
See TracTickets
for help on using tickets.