Opened 10 years ago
Last modified 10 years ago
#23836 closed Bug
aggregate with a sliced queryset doesn't work with relations — at Initial Version
Reported by: | Reinout van Rees | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Sander Smits, yitzc | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
#12886 fixed aggregation for sliced querysets by using subqueries.
This also fixed the GIS "Extent" aggregation for sliced querysets, which was reported in #15101.
While investigating #15101, a test we made failed initially. We noticed however that we were doing an extent aggregation over a relation. So we also made a test for the simple slice+extent() case, which worked.
Aha! Then we made a test similar to the one made to test #12886, but which followed a relation. At least with postgres this resulted in an error: column subquery.num_awards does not exist
.
`
Traceback (most recent call last):
File "/d/dev/repos/django/django/tests/aggregation/tests.py", line 664, in test_aggregation_with_limit_and_relation
vals = qs.aggregate(average_num_awards=Avg('publishernum_awards'))average_num_awards
File "/d/dev/repos/django/django/django/db/models/query.py", line 342, in aggregate
return query.get_aggregation(using=self.db, force_subq=force_subq)
File "/d/dev/repos/django/django/django/db/models/sql/query.py", line 366, in get_aggregation
result = compiler.execute_sql(SINGLE)
File "/d/dev/repos/django/django/django/db/models/sql/compiler.py", line 817, in execute_sql
cursor.execute(sql, params)
File "/d/dev/repos/django/django/django/db/backends/utils.py", line 65, in execute
return self.cursor.execute(sql, params)
File "/d/dev/repos/django/django/django/db/utils.py", line 95, in exit
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/d/dev/repos/django/django/django/db/backends/utils.py", line 65, in execute
return self.cursor.execute(sql, params)
ProgrammingError: column subquery.num_awards does not exist
LINE 1: SELECT AVG("subquery"."num_awards") FROM (SELECT "aggregatio...
`
I don't know how bad this is. Whether it is even supposed to work.
I also don't know how hard to fix it is :-) Might be just a matter of doing AVG("subquery"."publisher"."num_awards")
, so adding the
.publisher
relation name in there.
Pull request with the failing test is upcoming.