﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
31659	Django loses information regarding the type of grouping columns	Thodoris Sotiropoulos	Mariusz Felisiak	"I have the following query

{{{#!python
expr = ExpressionWrapper((Value(4) * Value(1)), output_field=FloatField())
aggr = ExpressionWrapper(Avg(F('col'), output_field=FloatField()), output_field=FloatField())
Model.objects.using('default').annotate(expr=expr).annotate(aggr=aggr)
}}}

This produces the following exception

{{{
Traceback (most recent call last%):
  File ""driver_sqlite.py"", line 19, in <module>
    for r in ret2:
  File ""/dir/.env/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/models/query.py"", line 287, in __iter__
    self._fetch_all()
  File ""/dir/.env/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/models/query.py"", line 1305, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File ""/dir/.env/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/models/query.py"", line 111, in __iter__
    for row in compiler.results_iter(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size):
  File ""/dir/.env/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/models/sql/compiler.py"", line 1108, in results_iter
    results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size)
  File ""/dir/.env/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/models/sql/compiler.py"", line 1143, in execute_sql
    sql, params = self.as_sql()
  File ""/dir/.env/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/models/sql/compiler.py"", line 498, in as_sql
    extra_select, order_by, group_by = self.pre_sql_setup()
  File ""/dir/.env/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/models/sql/compiler.py"", line 60, in pre_sql_setup
    group_by = self.get_group_by(self.select + extra_select, order_by)
  File ""/dir/.env/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/models/sql/compiler.py"", line 142, in get_group_by
    sql, params = expr.select_format(self, sql, params)
  File ""/dir/.env/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/models/expressions.py"", line 386, in select_format
    return self.output_field.select_format(compiler, sql, params)
  File ""/dir/.env/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/utils/functional.py"", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File ""/dir/.env/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/models/expressions.py"", line 270, in output_field
    raise FieldError('Cannot resolve expression type, unknown output_field')
django.core.exceptions.FieldError: Cannot resolve expression type, unknown output_field
}}}

This issue manifests on the latest master version of Django and I think it's due to the fix of https://code.djangoproject.com/ticket/31651.
Specifically, Django loses the type of the grouping column (i.e., ""expr"") and that's why it throws this expression.

Maybe a patch to this issue is the following

{{{
--- a/django/db/models/expressions.py
+++ b/django/db/models/expressions.py
@@ -864,7 +864,8 @@
         return [self.expression]

     def get_group_by_cols(self, alias=None):
-        return self.expression.get_group_by_cols(alias=alias)
+        return [ExpressionWrapper(e, output_field=self.output_field)
+                for e in self.expression.get_group_by_cols(alias=alias)]

     def as_sql(self, compiler, connection):
         return self.expression.as_sql(compiler, connection)
}}}"	Bug	closed	Database layer (models, ORM)	3.1	Release blocker	fixed			Accepted	1	0	0	0	0	0
