﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
3248	order_by for a related table generates wrong query if the requested ordering field has the same name as the related class	Nikolaus Schlemm <nikl@…>	Adrian Holovaty	"reproducible by:

1. start an app ""orderbug"" with the following models:
{{{
class Category(models.Model):
    category = models.CharField(maxlength=255)


class Post(models.Model):
    category = models.ForeignKey(Category)
}}}
2. install it
3. run the following in the interpreter
{{{
In [1]: from orderbug.models import Post

In [2]: Post.objects.order_by('orderbug_category.category')
---------------------------------------------------------------------------
pysqlite2.dbapi2.OperationalError                          Traceback (most recent call last)

/home/nikl/dev/django/testproject/<ipython console> 

/usr/lib/python2.4/site-packages/IPython/Prompts.py in __call__(self, arg)
    512 
    513             # and now call a possibly user-defined print mechanism
--> 514             manipulated_val = self.display(arg)
    515             
    516             # user display hooks can change the variable to be stored in

/usr/lib/python2.4/site-packages/IPython/Prompts.py in _display(self, arg)
    536         """"""
    537 
--> 538         return self.shell.hooks.result_display(arg)
    539 
    540     # Assign the default display method:

/usr/lib/python2.4/site-packages/IPython/hooks.py in __call__(self, *args, **kw)
    131             #print ""prio"",prio,""cmd"",cmd #dbg
    132             try:
--> 133                 ret = cmd(*args, **kw)
    134                 return ret
    135             except ipapi.TryNext, exc:

/usr/lib/python2.4/site-packages/IPython/hooks.py in result_display(self, arg)
    152     
    153     if self.rc.pprint:
--> 154         out = pformat(arg)
    155         if '\n' in out:
    156             # So that multi-line strings line up with the left column of

/home/nikl/dev/django/testproject/pprint.py in pformat(self, object)
    108     def pformat(self, object):
    109         sio = _StringIO()
--> 110         self._format(object, sio, 0, 0, {}, 0)
    111         return sio.getvalue()
    112 

/home/nikl/dev/django/testproject/pprint.py in _format(self, object, stream, indent, allowance, context, level)
    126             self._readable = False
    127             return
--> 128         rep = self._repr(object, context, level - 1)
    129         typ = _type(object)
    130         sepLines = _len(rep) > (self._width - 1 - indent - allowance)

/home/nikl/dev/django/testproject/pprint.py in _repr(self, object, context, level)
    192     def _repr(self, object, context, level):
    193         repr, readable, recursive = self.format(object, context.copy(),
--> 194                                                 self._depth, level)
    195         if not readable:
    196             self._readable = False

/home/nikl/dev/django/testproject/pprint.py in format(self, object, context, maxlevels, level)
    204         and whether the object represents a recursive construct.
    205         """"""
--> 206         return _safe_repr(object, context, maxlevels, level)
    207 
    208 

/home/nikl/dev/django/testproject/pprint.py in _safe_repr(object, context, maxlevels, level)
    289         return format % _commajoin(components), readable, recursive
    290 
--> 291     rep = repr(object)
    292     return rep, (rep and not rep.startswith('<')), False
    293 

/home/nikl/site-packages/django/db/models/query.py in __repr__(self)
     95 
     96     def __repr__(self):
---> 97         return repr(self._get_data())
     98 
     99     def __len__(self):

/home/nikl/site-packages/django/db/models/query.py in _get_data(self)
    428     def _get_data(self):
    429         if self._result_cache is None:
--> 430             self._result_cache = list(self.iterator())
    431         return self._result_cache
    432 

/home/nikl/site-packages/django/db/models/query.py in iterator(self)
    170         cursor = connection.cursor()
    171         select, sql, params = self._get_sql_clause()
--> 172         cursor.execute(""SELECT "" + (self._distinct and ""DISTINCT "" or """") + "","".join(select) + sql, params)
    173         fill_cache = self._select_related
    174         index_end = len(self.model._meta.fields)

/home/nikl/site-packages/django/db/backends/util.py in execute(self, sql, params)
     10         start = time()
     11         try:
---> 12             return self.cursor.execute(sql, params)
     13         finally:
     14             stop = time()

/home/nikl/site-packages/django/db/backends/sqlite3/base.py in execute(self, query, params)
     90     def execute(self, query, params=()):
     91         query = self.convert_query(query, len(params))
---> 92         return Database.Cursor.execute(self, query, params)
     93 
     94     def executemany(self, query, param_list):

OperationalError: no such column: orderbug_category.category_id
}}}
"	defect	closed	Database layer (models, ORM)	dev	normal	duplicate	order_by		Unreviewed	0	0	0	0	0	0
