I think orderby should be fields, not field names. that is different for columns which should be names and not fields... I will fix this.
On Sep 23, 3:18 pm, Jim Steil <[email protected]> wrote: > Hi > > I'm using and really liking SQLFORM.smartgrid. However, I'm having > issues with the sorting, particularly on the grids for the related tables. > > Here is my scenario. > > I have a membership database and display a grid of members. > > grid = SQLFORM.smartgrid(db.member, columns=columns, csv=False, > details=False) > > I want to set my orderby for the members to go by lastName, firstName. > To do so, I try this: > > orderby = ['member.lastName, member.firstName'] > grid = SQLFORM.smartgrid(db.member, columns=columns, csv=False, > details=False, orderby=orderby) > > This works fine for sorting the member list, but when I click on one of > the related table buttons (memberCampaign in this case) in the last > column, I get the following: > > Traceback (most recent call last): > File "C:\dev\web2py\gluon\restricted.py", line 194, in restricted > exec ccode in environment > File "C:/dev/web2py/applications/test/controllers/default.py", line > 121, in <module> > File "C:\dev\web2py\gluon\globals.py", line 149, in <lambda> > self._caller = lambda f: f() > File "C:\dev\web2py\gluon\tools.py", line 2454, in f > return action(*a, **b) > File "C:/dev/web2py/applications/test/controllers/default.py", line > 105, in members > memberCampaign='Campaigns')) > File "C:\dev\web2py\gluon\sqlhtml.py", line 1767, in smartgrid > user_signature=user_signature,**kwargs) > File "C:\dev\web2py\gluon\sqlhtml.py", line 1588, in grid > rows = dbset.select(left=left,orderby=orderby,limitby=limitby,*fields) > File "C:\dev\web2py\gluon\dal.py", line 5697, in select > return self.db._adapter.select(self.query,fields,attributes) > File "C:\dev\web2py\gluon\dal.py", line 1225, in select > sql = self._select(query,fields,attributes) > File "C:\dev\web2py\gluon\dal.py", line 1201, in _select > orderby = xorify(orderby) > File "C:\dev\web2py\gluon\dal.py", line 5637, in xorify > orderby2 = orderby2 | item > TypeError: unsupported operand type(s) for |: 'str' and 'str' > > If I click on a different related table (memberTag) in the last column, > I get this: > > Traceback (most recent call last): > File "C:\dev\web2py\gluon\restricted.py", line 194, in restricted > exec ccode in environment > File "C:/dev/web2py/applications/test/controllers/default.py", line > 121, in <module> > File "C:\dev\web2py\gluon\globals.py", line 149, in <lambda> > self._caller = lambda f: f() > File "C:\dev\web2py\gluon\tools.py", line 2454, in f > return action(*a, **b) > File "C:/dev/web2py/applications/test/controllers/default.py", line > 105, in members > memberCampaign='Campaigns')) > File "C:\dev\web2py\gluon\sqlhtml.py", line 1767, in smartgrid > user_signature=user_signature,**kwargs) > File "C:\dev\web2py\gluon\sqlhtml.py", line 1588, in grid > rows = dbset.select(left=left,orderby=orderby,limitby=limitby,*fields) > File "C:\dev\web2py\gluon\dal.py", line 5697, in select > return self.db._adapter.select(self.query,fields,attributes) > File "C:\dev\web2py\gluon\dal.py", line 1233, in select > rows = response(sql) > File "C:\dev\web2py\gluon\dal.py", line 1223, in response > self.execute(sql) > File "C:\dev\web2py\gluon\dal.py", line 1309, in execute > return self.log_execute(*a, **b) > File "C:\dev\web2py\gluon\dal.py", line 1304, in log_execute > ret = self.cursor.execute(*a,**b) > File "C:\dev\web2py\gluon\contrib\pymysql\cursors.py", line 108, in > execute > self.errorhandler(self, exc, value) > File "C:\dev\web2py\gluon\contrib\pymysql\connections.py", line 184, > in defaulterrorhandler > raise errorclass, errorvalue > InternalError: (1054, u"Unknown column 'member.lastName' in 'order clause'") > > If I take the orderby out of the SQLFORM.smartgrid call, then it all > works fine. > > My question is whether or not there is a way to control the orderby > clause for the related tables. > > -Jim

