Re: order_by foreign key problem
On Fri, May 30, 2008 at 6:09 PM, robstar <[EMAIL PROTECTED]> wrote: > > Thanks for your help Richard.. taking out the select_related() > results in the same problem. Isn't a OnetoOneField just a fancy name > wrapper for a foreign key?? > > mysql> describe itemengine_gear; > +-+--+--+-+-+---+ > | Field | Type | Null | Key | Default | Extra | > +-+--+--+-+-+---+ > | generic_info_id | int(11) | | PRI | 0 | | > +-+--+--+-+-+---+ > > >>> gear = Gear.objects.order_by('-generic_info__hits') > >>> print gear > [snipped some] > OperationalError: (1054, "Unknown column > 'itemengine_gear.generic_info__hits' in 'order clause'") > > I can't believe I used this OnetoOne and populated a whole db around > this model and it's broken. Do you think this is a bug ? Is there > some way I can trick django and change the model to a regular foreign > key without having to start everything over? > > Thanks. > It was a bug, ordering by foreign key fields was notoriously fragile before queryset-refactor was merged into trunk. I just tried your example on current trunk and it works fine. So I'd advise updating to a current SVN checkout of Django. Karen --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~--~~~~--~~--~--~---
Re: order_by foreign key problem
Thanks for your help Richard.. taking out the select_related() results in the same problem. Isn't a OnetoOneField just a fancy name wrapper for a foreign key?? mysql> describe itemengine_gear; +-+--+--+-+-+---+ | Field | Type | Null | Key | Default | Extra | +-+--+--+-+-+---+ | generic_info_id | int(11) | | PRI | 0 | | +-+--+--+-+-+---+ >>> gear = Gear.objects.order_by('-generic_info__hits') >>> print gear Traceback (most recent call last): File "", line 1, in ? File "/usr/lib/python2.3/site-packages/django/db/models/query.py", line 108, in __repr__ return repr(self._get_data()) File "/usr/lib/python2.3/site-packages/django/db/models/query.py", line 483, in _get_data self._result_cache = list(self.iterator()) File "/usr/lib/python2.3/site-packages/django/db/models/query.py", line 189, in iterator cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params) File "/usr/lib/python2.3/site-packages/django/db/backends/util.py", line 18, in execute return self.cursor.execute(sql, params) File "/usr/lib/python2.3/site-packages/MySQLdb/cursors.py", line 163, in execute self.errorhandler(self, exc, value) File "/usr/lib/python2.3/site-packages/MySQLdb/connections.py", line 35, in defaulterrorhandler raise errorclass, errorvalue OperationalError: (1054, "Unknown column 'itemengine_gear.generic_info__hits' in 'order clause'") I can't believe I used this OnetoOne and populated a whole db around this model and it's broken. Do you think this is a bug ? Is there some way I can trick django and change the model to a regular foreign key without having to start everything over? Thanks. On May 29, 6:10 pm, "Richard Dahl" <[EMAIL PROTECTED]> wrote: > I am not sure what is going on, however I wonder if it has something to do > with the OneToOne relationship, I do not use onetoone myself but notice in > the following from the db-api documentation: > > Note that the select_related() QuerySet method recursively prepopulates the > cache of all one-to-many relationships ahead of time. > > Try to do it without the select_related to see if you can get the query to > execute. I know this will mean an additional hit on the db to access the > related model, but I can't think of anything else. > > hth, > > -richard > > On 5/29/08, robstar <[EMAIL PROTECTED]> wrote: > > > > > Oops, I had the ' ' in there somewhere in all my different iterations > > of trying to make this work .. so the query works, but I can't access > > the object in the template, or from the shell for that matter. Does > > something change by doing this type of query? > > > On the shell: > > > >>> gear = Gear.objects.select_related().order_by('-generic_info__hits') > > >>> print gear > > > Traceback (most recent call last): > > File "", line 1, in ? > > File "/usr/lib/python2.3/site-packages/django/db/models/query.py", > > line 108, in __repr__ > >return repr(self._get_data()) > > File "/usr/lib/python2.3/site-packages/django/db/models/query.py", > > line 483, in _get_data > >self._result_cache = list(self.iterator()) > > File "/usr/lib/python2.3/site-packages/django/db/models/query.py", > > line 189, in iterator > >cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") > > + ",".join(select) + sql, params) > > File "/usr/lib/python2.3/site-packages/django/db/backends/util.py", > > line 18, in execute > >return self.cursor.execute(sql, params) > > File "/usr/lib/python2.3/site-packages/MySQLdb/cursors.py", line > > 163, in execute > >self.errorhandler(self, exc, value) > > File "/usr/lib/python2.3/site-packages/MySQLdb/connections.py", line > > 35, in defaulterrorhandler > >raise errorclass, errorvalue > > OperationalError: (1054, "Unknown column > > 'itemengine_gear.generic_info__hits' in 'order clause'") > > > The template chokes the same way trying to access the object... > > I shouldn't have to change my code? > > > rob > > > On May 29, 4:16 pm, "Richard Dahl" <[EMAIL PROTECTED]> wrote: > > >http://www.djangoproject.com/documentation/db-api/ > > > contains the info you want. Try this: > > > Gear.objects.select_related().order_by('generic_info__hits') > > > > you could also set the order_by in the Meta of Item to hits and then you > > > could just do: > > > Gear.objects.select_related().order_by('generic_info') > > > > hth, > > > -richard > > > > On 5/29/08, robstar <[EMAIL PROTECTED]> wrote: > > > > > Hey guys, > > > > > I read through some of the threads here, but still can't get this > > > > simple scenario to work.. > > > > > DB name: gcdb > > > > > class Item(models.Model): > > > > hits= models.IntegerField(default=0) > > > > > class Gear(models.Model): > > > > generic_info= models.OneToOneField(Item) > > > > > Should this work
Re: order_by foreign key problem
Wah, nevermind .. Am 30.05.2008 um 01:27 schrieb Johannes Dollinger: > >> Should this work?? >> >> results = Gear.objects.select_related().order_by >> (generic_info__hits) > > Quotes are missing: > > Gear.objects.select_related().order_by('generic_info__hits') > > > > > > > --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~--~~~~--~~--~--~---
Re: order_by foreign key problem
> Should this work?? > > results = Gear.objects.select_related().order_by(generic_info__hits) Quotes are missing: Gear.objects.select_related().order_by('generic_info__hits') --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~--~~~~--~~--~--~---
Re: order_by foreign key problem
I am not sure what is going on, however I wonder if it has something to do with the OneToOne relationship, I do not use onetoone myself but notice in the following from the db-api documentation: Note that the select_related() QuerySet method recursively prepopulates the cache of all one-to-many relationships ahead of time. Try to do it without the select_related to see if you can get the query to execute. I know this will mean an additional hit on the db to access the related model, but I can't think of anything else. hth, -richard On 5/29/08, robstar <[EMAIL PROTECTED]> wrote: > > > Oops, I had the ' ' in there somewhere in all my different iterations > of trying to make this work .. so the query works, but I can't access > the object in the template, or from the shell for that matter. Does > something change by doing this type of query? > > On the shell: > > >>> gear = Gear.objects.select_related().order_by('-generic_info__hits') > >>> print gear > > Traceback (most recent call last): > File "", line 1, in ? > File "/usr/lib/python2.3/site-packages/django/db/models/query.py", > line 108, in __repr__ >return repr(self._get_data()) > File "/usr/lib/python2.3/site-packages/django/db/models/query.py", > line 483, in _get_data >self._result_cache = list(self.iterator()) > File "/usr/lib/python2.3/site-packages/django/db/models/query.py", > line 189, in iterator >cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") > + ",".join(select) + sql, params) > File "/usr/lib/python2.3/site-packages/django/db/backends/util.py", > line 18, in execute >return self.cursor.execute(sql, params) > File "/usr/lib/python2.3/site-packages/MySQLdb/cursors.py", line > 163, in execute >self.errorhandler(self, exc, value) > File "/usr/lib/python2.3/site-packages/MySQLdb/connections.py", line > 35, in defaulterrorhandler >raise errorclass, errorvalue > OperationalError: (1054, "Unknown column > 'itemengine_gear.generic_info__hits' in 'order clause'") > > The template chokes the same way trying to access the object... > I shouldn't have to change my code? > > rob > > On May 29, 4:16 pm, "Richard Dahl" <[EMAIL PROTECTED]> wrote: > > http://www.djangoproject.com/documentation/db-api/ > > contains the info you want. Try this: > > Gear.objects.select_related().order_by('generic_info__hits') > > > > you could also set the order_by in the Meta of Item to hits and then you > > could just do: > > Gear.objects.select_related().order_by('generic_info') > > > > hth, > > -richard > > > > On 5/29/08, robstar <[EMAIL PROTECTED]> wrote: > > > > > > > > > Hey guys, > > > > > I read through some of the threads here, but still can't get this > > > simple scenario to work.. > > > > > DB name: gcdb > > > > > class Item(models.Model): > > > hits= models.IntegerField(default=0) > > > > > class Gear(models.Model): > > > generic_info= models.OneToOneField(Item) > > > > > Should this work?? > > > > > results = Gear.objects.select_related().order_by(generic_info__hits) > > > > > I also tried putting the db name in there like I saw in some old > > > examples: > > > > > results = > > > Gear.objects.select_related().order_by(gcdb_generic_info__hits) > > > > > Both result in the field not being found.. Any ideas??? thanks! > > > > > rob > > > --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~--~~~~--~~--~--~---
Re: order_by foreign key problem
Oops, I had the ' ' in there somewhere in all my different iterations of trying to make this work .. so the query works, but I can't access the object in the template, or from the shell for that matter. Does something change by doing this type of query? On the shell: >>> gear = Gear.objects.select_related().order_by('-generic_info__hits') >>> print gear Traceback (most recent call last): File "", line 1, in ? File "/usr/lib/python2.3/site-packages/django/db/models/query.py", line 108, in __repr__ return repr(self._get_data()) File "/usr/lib/python2.3/site-packages/django/db/models/query.py", line 483, in _get_data self._result_cache = list(self.iterator()) File "/usr/lib/python2.3/site-packages/django/db/models/query.py", line 189, in iterator cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params) File "/usr/lib/python2.3/site-packages/django/db/backends/util.py", line 18, in execute return self.cursor.execute(sql, params) File "/usr/lib/python2.3/site-packages/MySQLdb/cursors.py", line 163, in execute self.errorhandler(self, exc, value) File "/usr/lib/python2.3/site-packages/MySQLdb/connections.py", line 35, in defaulterrorhandler raise errorclass, errorvalue OperationalError: (1054, "Unknown column 'itemengine_gear.generic_info__hits' in 'order clause'") The template chokes the same way trying to access the object... I shouldn't have to change my code? rob On May 29, 4:16 pm, "Richard Dahl" <[EMAIL PROTECTED]> wrote: > http://www.djangoproject.com/documentation/db-api/ > contains the info you want. Try this: > Gear.objects.select_related().order_by('generic_info__hits') > > you could also set the order_by in the Meta of Item to hits and then you > could just do: > Gear.objects.select_related().order_by('generic_info') > > hth, > -richard > > On 5/29/08, robstar <[EMAIL PROTECTED]> wrote: > > > > > Hey guys, > > > I read through some of the threads here, but still can't get this > > simple scenario to work.. > > > DB name: gcdb > > > class Item(models.Model): > > hits= models.IntegerField(default=0) > > > class Gear(models.Model): > > generic_info= models.OneToOneField(Item) > > > Should this work?? > > > results = Gear.objects.select_related().order_by(generic_info__hits) > > > I also tried putting the db name in there like I saw in some old > > examples: > > > results = > > Gear.objects.select_related().order_by(gcdb_generic_info__hits) > > > Both result in the field not being found.. Any ideas??? thanks! > > > rob --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~--~~~~--~~--~--~---
Re: order_by foreign key problem
Oops, I had the ' ' in there somewhere in all my different iterations of trying to make this work .. so the query works, but I can't access the object in the template, or from the shell for that matter. Does something change by doing this type of query? On the shell: >>> gear = Gear.objects.select_related().order_by('-generic_info__hits') >>> print gear Traceback (most recent call last): File "", line 1, in ? File "/usr/lib/python2.3/site-packages/django/db/models/query.py", line 108, in __repr__ return repr(self._get_data()) File "/usr/lib/python2.3/site-packages/django/db/models/query.py", line 483, in _get_data self._result_cache = list(self.iterator()) File "/usr/lib/python2.3/site-packages/django/db/models/query.py", line 189, in iterator cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params) File "/usr/lib/python2.3/site-packages/django/db/backends/util.py", line 18, in execute return self.cursor.execute(sql, params) File "/usr/lib/python2.3/site-packages/MySQLdb/cursors.py", line 163, in execute self.errorhandler(self, exc, value) File "/usr/lib/python2.3/site-packages/MySQLdb/connections.py", line 35, in defaulterrorhandler raise errorclass, errorvalue OperationalError: (1054, "Unknown column 'itemengine_knives.generic_info__hits' in 'order clause'") The template chokes the same way trying to access the object... I shouldn't have to change my code? rob On May 29, 4:16 pm, "Richard Dahl" <[EMAIL PROTECTED]> wrote: > http://www.djangoproject.com/documentation/db-api/ > contains the info you want. Try this: > Gear.objects.select_related().order_by('generic_info__hits') > > you could also set the order_by in the Meta of Item to hits and then you > could just do: > Gear.objects.select_related().order_by('generic_info') > > hth, > -richard > > On 5/29/08, robstar <[EMAIL PROTECTED]> wrote: > > > > > Hey guys, > > > I read through some of the threads here, but still can't get this > > simple scenario to work.. > > > DB name: gcdb > > > class Item(models.Model): > > hits= models.IntegerField(default=0) > > > class Gear(models.Model): > > generic_info= models.OneToOneField(Item) > > > Should this work?? > > > results = Gear.objects.select_related().order_by(generic_info__hits) > > > I also tried putting the db name in there like I saw in some old > > examples: > > > results = > > Gear.objects.select_related().order_by(gcdb_generic_info__hits) > > > Both result in the field not being found.. Any ideas??? thanks! > > > rob --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~--~~~~--~~--~--~---
Re: order_by foreign key problem
http://www.djangoproject.com/documentation/db-api/ contains the info you want. Try this: Gear.objects.select_related().order_by('generic_info__hits') you could also set the order_by in the Meta of Item to hits and then you could just do: Gear.objects.select_related().order_by('generic_info') hth, -richard On 5/29/08, robstar <[EMAIL PROTECTED]> wrote: > > > Hey guys, > > I read through some of the threads here, but still can't get this > simple scenario to work.. > > DB name: gcdb > > class Item(models.Model): > hits= models.IntegerField(default=0) > > class Gear(models.Model): > generic_info= models.OneToOneField(Item) > > > Should this work?? > > results = Gear.objects.select_related().order_by(generic_info__hits) > > I also tried putting the db name in there like I saw in some old > examples: > > results = > Gear.objects.select_related().order_by(gcdb_generic_info__hits) > > > Both result in the field not being found.. Any ideas??? thanks! > > rob > > > > --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~--~~~~--~~--~--~---
order_by foreign key problem
Hey guys, I read through some of the threads here, but still can't get this simple scenario to work.. DB name: gcdb class Item(models.Model): hits= models.IntegerField(default=0) class Gear(models.Model): generic_info= models.OneToOneField(Item) Should this work?? results = Gear.objects.select_related().order_by(generic_info__hits) I also tried putting the db name in there like I saw in some old examples: results = Gear.objects.select_related().order_by(gcdb_generic_info__hits) Both result in the field not being found.. Any ideas??? thanks! rob --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~--~~~~--~~--~--~---