#15108: order_by on annotate doesn't work with camelCased annotation names
------------------------------------------+---------------------------------
Reporter: jorn | Owner: nobody
Status: new | Milestone:
Component: Database layer (models, ORM) | Version: 1.2
Keywords: | Stage: Unreviewed
Has_patch: 0 |
------------------------------------------+---------------------------------
this works:
{{{
#!python
User.objects.annotate(gamecount=Count('game')).order_by('-gamecount')
}}}
this doesn't:
{{{
#!python
User.objects.annotate(gameCount=Count('game')).order_by('-gameCount')
}}}
It throws an exception:
{{{
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (267, 0))
---------------------------------------------------------------------------
DatabaseError Traceback (most recent call
last)
/home/django/gwapy/src/mysite/<ipython console> in <module>()
/usr/lib/pymodules/python2.6/IPython/Prompts.pyc in __call__(self, arg)
550
551 # and now call a possibly user-defined print mechanism
--> 552 manipulated_val = self.display(arg)
553
554 # user display hooks can change the variable to be
stored in
/usr/lib/pymodules/python2.6/IPython/Prompts.pyc in _display(self, arg)
576 return IPython.generics.result_display(arg)
577 except TryNext:
--> 578 return self.shell.hooks.result_display(arg)
579
580 # Assign the default display method:
/usr/lib/pymodules/python2.6/IPython/hooks.pyc in __call__(self, *args,
**kw)
139 #print "prio",prio,"cmd",cmd #dbg
140 try:
--> 141 ret = cmd(*args, **kw)
142 return ret
143 except ipapi.TryNext, exc:
/usr/lib/pymodules/python2.6/IPython/hooks.pyc in result_display(self,
arg)
169
170 if self.rc.pprint:
--> 171 out = pformat(arg)
172 if '\n' in out:
173 # So that multi-line strings line up with the left
column of
/usr/lib/python2.6/pprint.pyc in pformat(self, object)
109 def pformat(self, object):
110 sio = _StringIO()
--> 111 self._format(object, sio, 0, 0, {}, 0)
112 return sio.getvalue()
113
/usr/lib/python2.6/pprint.pyc in _format(self, object, stream, indent,
allowance, context, level)
127 self._readable = False
128 return
--> 129 rep = self._repr(object, context, level - 1)
130 typ = _type(object)
131 sepLines = _len(rep) > (self._width - 1 - indent -
allowance)
/usr/lib/python2.6/pprint.pyc in _repr(self, object, context, level)
221 def _repr(self, object, context, level):
222 repr, readable, recursive = self.format(object,
context.copy(),
--> 223 self._depth,
level)
224 if not readable:
225 self._readable = False
/usr/lib/python2.6/pprint.pyc in format(self, object, context, maxlevels,
level)
233 and whether the object represents a recursive construct.
234 """
--> 235 return _safe_repr(object, context, maxlevels, level)
236
237
/usr/lib/python2.6/pprint.pyc in _safe_repr(object, context, maxlevels,
level)
318 return format % _commajoin(components), readable,
recursive
319
--> 320 rep = repr(object)
321 return rep, (rep and not rep.startswith('<')), False
322
/usr/local/lib/python2.6/dist-
packages/Django-1.2.4-py2.6.egg/django/db/models/query.pyc in
__repr__(self)
65
66 def __repr__(self):
---> 67 data = list(self[:REPR_OUTPUT_SIZE + 1])
68 if len(data) > REPR_OUTPUT_SIZE:
69 data[-1] = "...(remaining elements truncated)..."
/usr/local/lib/python2.6/dist-
packages/Django-1.2.4-py2.6.egg/django/db/models/query.pyc in
__len__(self)
80 self._result_cache = list(self.iterator())
81 elif self._iter:
---> 82 self._result_cache.extend(list(self._iter))
83 return len(self._result_cache)
84
/usr/local/lib/python2.6/dist-
packages/Django-1.2.4-py2.6.egg/django/db/models/query.pyc in
iterator(self)
269 model = self.model
270 compiler = self.query.get_compiler(using=db)
--> 271 for row in compiler.results_iter():
272 if fill_cache:
273 obj, _ = get_cached_row(model, row,
/usr/local/lib/python2.6/dist-
packages/Django-1.2.4-py2.6.egg/django/db/models/sql/compiler.pyc in
results_iter(self)
675 fields = None
676 has_aggregate_select = bool(self.query.aggregate_select)
--> 677 for rows in self.execute_sql(MULTI):
678 for row in rows:
679 if resolve_columns:
/usr/local/lib/python2.6/dist-
packages/Django-1.2.4-py2.6.egg/django/db/models/sql/compiler.pyc in
execute_sql(self, result_type)
730
731 cursor = self.connection.cursor()
--> 732 cursor.execute(sql, params)
733
734 if not result_type:
/usr/local/lib/python2.6/dist-
packages/Django-1.2.4-py2.6.egg/django/db/backends/postgresql_psycopg2/base.pyc
in execute(self, query, args)
42 def execute(self, query, args=None):
43 try:
---> 44 return self.cursor.execute(query, args)
45 except Database.IntegrityError, e:
46 raise utils.IntegrityError,
utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
DatabaseError: column "gamecount" does not exist
LINE 1: ...", "myapp_user"."lastSeen" ORDER BY gameCount ...
}}}
Are there maybe quotes missing around the order by clause's gameCount?
Just in case it matters:
Game has a field users = ManyToManyField(User)
--
Ticket URL: <http://code.djangoproject.com/ticket/15108>
Django <http://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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.