#23836: aggregate with a sliced queryset doesn't work with relations
----------------------------------------------+--------------------
Reporter: reinout | Owner: nobody
Type: Bug | Status: new
Component: Database layer (models, ORM) | Version: master
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
----------------------------------------------+--------------------
#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('publisher__num_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.
--
Ticket URL: <https://code.djangoproject.com/ticket/23836>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/050.8f8714b4ddf1cdea532064d1a478d35a%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.