Opened 10 years ago
Last modified 10 years ago
#24570 closed Bug
Cannot resolve keyword "CAST" in group_by clause. — at Initial Version
Reported by: | user0007 | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.8 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
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