#31919: Django fails with FieldError: Expression contains mixed types:
IntegerField, AutoField. You must set output_field.
---------------------------------------------+------------------------
               Reporter:  StefanosChaliasos  |          Owner:  nobody
                   Type:  Uncategorized      |         Status:  new
              Component:  Uncategorized      |        Version:  master
               Severity:  Normal             |       Keywords:
           Triage Stage:  Unreviewed         |      Has patch:  0
    Needs documentation:  0                  |    Needs tests:  0
Patch needs improvement:  0                  |  Easy pickings:  0
                  UI/UX:  0                  |
---------------------------------------------+------------------------
 I have the following query.


 {{{
 expr = Value(3) * F('id')
 o = Model.objects.using('default')
 res = o.values('field_name').annotate(expr=expr).values('expr')
 print(res)
 }}}

 Unfortunately, this query crashes with a FieldError exception. The track
 trace is


 {{{
 Traceback (most recent call last):
   File "example.py", line 28, in <module>
     print(res)
   File "/home/.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 "/home/.env/lib/python3.6/site-
 packages/Django-3.2-py3.6.egg/django/db/models/query.py", line 1316, in
 _fetch_all
     self._result_cache = list(self._iterable_class(self))
   File "/home/.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 "/home/.env/lib/python3.6/site-
 packages/Django-3.2-py3.6.egg/django/db/models/sql/compiler.py", line
 1115, in results_iter
     results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch,
 chunk_size=chunk_size)
   File "/home/.env/lib/python3.6/site-
 packages/Django-3.2-py3.6.egg/django/db/models/sql/compiler.py", line
 1147, in execute_sql
     sql, params = self.as_sql()
   File "/home/.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 "/home/.env/lib/python3.6/site-
 packages/Django-3.2-py3.6.egg/django/db/models/sql/compiler.py", line 55,
 in pre_sql_setup
     self.setup_query()
   File "/home/.env/lib/python3.6/site-
 packages/Django-3.2-py3.6.egg/django/db/models/sql/compiler.py", line 46,
 in setup_query
     self.select, self.klass_info, self.annotation_col_map =
 self.get_select()
   File "/home/.env/lib/python3.6/site-
 packages/Django-3.2-py3.6.egg/django/db/models/sql/compiler.py", line 267,
 in get_select
     sql, params = col.select_format(self, sql, params)
   File "/home/.env/lib/python3.6/site-
 packages/Django-3.2-py3.6.egg/django/db/models/expressions.py", line 385,
 in select_format
     if hasattr(self.output_field, 'select_format'):
   File "/home/.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 "/home/.env/lib/python3.6/site-
 packages/Django-3.2-py3.6.egg/django/db/models/expressions.py", line 266,
 in output_field
     output_field = self._resolve_output_field()
   File "/home/.env/lib/python3.6/site-
 packages/Django-3.2-py3.6.egg/django/db/models/expressions.py", line 463,
 in _resolve_output_field
     return super()._resolve_output_field()
   File "/home/.env/lib/python3.6/site-
 packages/Django-3.2-py3.6.egg/django/db/models/expressions.py", line 306,
 in _resolve_output_field
     source.__class__.__name__,
 django.core.exceptions.FieldError: Expression contains mixed types:
 IntegerField, AutoField. You must set output_field.
 }}}

 This should be a regression bug because the previous query works in Django
 3.1

-- 
Ticket URL: <https://code.djangoproject.com/ticket/31919>
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/060.86be63dbd914a60dba384d460544b09e%40djangoproject.com.

Reply via email to