#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.