#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
-------------------------------------+-------------------------------------
Changes (by user0007):
* needs_docs: => 0
* needs_tests: => 0
* needs_better_patch: => 0
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:1>
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/066.a8bfb40a679be2343459afd9714527ae%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.