#24570: Cannot resolve keyword "CAST" in group_by clause.
-------------------------------------+-------------------------------------
     Reporter:  user0007             |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:  1.8
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by user0007:

Old description:

> Hello,
>
> during migrating from Django 1.7.5 to 1.8 I found a bug(?)
>
> {{{
>     truncate_date = connection.ops.date_trunc_sql('day', 'created_at')
>
>     qs =
> MyModel.objects.filter(user_id=1).annotate(max_date=models.Max('created_at')).extra({'created_at':
> truncate_date}).values('product_id','created_at','max_date')
>     qs.query.group_by = ['product_id', truncate_date]
>     qs.order_by('-max_date')[:10]
> }}}
>
> {{{
> Traceback (most recent call last):
>   File "<console>", line 1, in <module>
>   File "/home/env/local/lib/python2.7/site-
> packages/django/db/models/query.py", line 138, in __repr__
>     data = list(self[:REPR_OUTPUT_SIZE + 1])
>   File "/home/env/local/lib/python2.7/site-
> packages/django/db/models/query.py", line 162, in __iter__
>     self._fetch_all()
>   File "/home/env/local/lib/python2.7/site-
> packages/django/db/models/query.py", line 965, in _fetch_all
>     self._result_cache = list(self.iterator())
>   File "/home/env/local/lib/python2.7/site-
> packages/django/db/models/query.py", line 1085, in iterator
>     for row in self.query.get_compiler(self.db).results_iter():
>   File "/home/env/local/lib/python2.7/site-
> packages/django/db/models/sql/compiler.py", line 783, in results_iter
>     results = self.execute_sql(MULTI)
>   File "/home/env/local/lib/python2.7/site-
> packages/django/db/models/sql/compiler.py", line 818, in execute_sql
>     sql, params = self.as_sql()
>   File "/home/env/local/lib/python2.7/site-
> packages/django/db/models/sql/compiler.py", line 367, in as_sql
>     extra_select, order_by, group_by = self.pre_sql_setup()
>   File "/home/env/local/lib/python2.7/site-
> packages/django/db/models/sql/compiler.py", line 51, in pre_sql_setup
>     group_by = self.get_group_by(self.select + extra_select, order_by)
>   File "/home/env/local/lib/python2.7/site-
> packages/django/db/models/sql/compiler.py", line 102, in get_group_by
>     expressions.append(self.query.resolve_ref(expr))
>   File "/home/env/local/lib/python2.7/site-
> packages/django/db/models/sql/query.py", line 1522, in resolve_ref
>     self.get_initial_alias(), reuse)
>   File "/home/env/local/lib/python2.7/site-
> packages/django/db/models/sql/query.py", line 1461, in setup_joins
>     names, opts, allow_many, fail_on_missing=True)
>   File "/home/env/local/lib/python2.7/site-
> packages/django/db/models/sql/query.py", line 1386, in names_to_path
>     "Choices are: %s" % (name, ", ".join(available)))
> FieldError: Cannot resolve keyword u"CAST(DATE_FORMAT(created_at,
> '%%Y-%%m-%%d 00:00:00') AS DATETIME)" into field.
> }}}
>
> This code works perfectly on Django 1.7.5

New description:

 Hello,

 during migrating from Django 1.7.5 to 1.8 I found a bug(?)

 {{{
     truncate_date = connection.ops.date_trunc_sql('day', 'created_at')

     qs = MyModel.objects.filter(
         user_id=1
     ).annotate(
         max_date=models.Max('created_at')
     ).extra(
         {'created_at': truncate_date}
     ).values(
         'product_id', 'created_at', 'max_date'
     )
     qs.query.group_by = ['product_id', truncate_date]
     qs.order_by('-max_date')[:10]

 }}}

 {{{
 Traceback (most recent call last):
   File "<console>", line 1, in <module>
   File "/home/env/local/lib/python2.7/site-
 packages/django/db/models/query.py", line 138, in __repr__
     data = list(self[:REPR_OUTPUT_SIZE + 1])
   File "/home/env/local/lib/python2.7/site-
 packages/django/db/models/query.py", line 162, in __iter__
     self._fetch_all()
   File "/home/env/local/lib/python2.7/site-
 packages/django/db/models/query.py", line 965, in _fetch_all
     self._result_cache = list(self.iterator())
   File "/home/env/local/lib/python2.7/site-
 packages/django/db/models/query.py", line 1085, in iterator
     for row in self.query.get_compiler(self.db).results_iter():
   File "/home/env/local/lib/python2.7/site-
 packages/django/db/models/sql/compiler.py", line 783, in results_iter
     results = self.execute_sql(MULTI)
   File "/home/env/local/lib/python2.7/site-
 packages/django/db/models/sql/compiler.py", line 818, in execute_sql
     sql, params = self.as_sql()
   File "/home/env/local/lib/python2.7/site-
 packages/django/db/models/sql/compiler.py", line 367, in as_sql
     extra_select, order_by, group_by = self.pre_sql_setup()
   File "/home/env/local/lib/python2.7/site-
 packages/django/db/models/sql/compiler.py", line 51, in pre_sql_setup
     group_by = self.get_group_by(self.select + extra_select, order_by)
   File "/home/env/local/lib/python2.7/site-
 packages/django/db/models/sql/compiler.py", line 102, in get_group_by
     expressions.append(self.query.resolve_ref(expr))
   File "/home/env/local/lib/python2.7/site-
 packages/django/db/models/sql/query.py", line 1522, in resolve_ref
     self.get_initial_alias(), reuse)
   File "/home/env/local/lib/python2.7/site-
 packages/django/db/models/sql/query.py", line 1461, in setup_joins
     names, opts, allow_many, fail_on_missing=True)
   File "/home/env/local/lib/python2.7/site-
 packages/django/db/models/sql/query.py", line 1386, in names_to_path
     "Choices are: %s" % (name, ", ".join(available)))
 FieldError: Cannot resolve keyword u"CAST(DATE_FORMAT(created_at,
 '%%Y-%%m-%%d 00:00:00') AS DATETIME)" into field.
 }}}

 This code works perfectly on Django 1.7.5

--

--
Ticket URL: <https://code.djangoproject.com/ticket/24570#comment:2>
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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/066.3bc4fd18552b70863f4d9b174f6227cd%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to