On further digging, I see that this set of lines - around 2018 in dal.py were changed from a much simpler version that did not use self.db. However, I still don't see why the code throws a self.db error on line 2018, instead of in, say a few lines about it when the code again references self.db (if referenced in self.db.tables:)
On Friday, March 7, 2014 12:31:09 AM UTC-5, PN wrote: > > When I use a query which uses a reference type field, I get the > error: <type 'exceptions.AttributeError'> 'DAL' object has no attribute > 'db' > In my code below, db.Units.site_id is a reference field. The error only > happens when I use this field and not on other fields of the table. > > The relevant traceback seems to be: > > File "C:/web2py/applications/mgmt/controllers/programs.py" > <http://127.0.0.1:8000/admin/default/edit/mgmt/controllers/programs.py>, line > 170, in nyserda > units = db(db.Units.site_id == 1)._select() > File "C:\web2py\gluon\dal.py", line 10359, in _select > return adapter._select(self.query,fields,attributes) > File "C:\web2py\gluon\dal.py", line 1774, in _select > sql_w = ' WHERE ' + self.expand(query) if query else '' > File "C:\web2py\gluon\dal.py", line 1541, in expand > out = op(first, second, **optional_args) > File "C:\web2py\gluon\dal.py", line 1438, in EQ > self.expand(second, first.type)) > File "C:\web2py\gluon\dal.py", line 1552, in expand > return str(self.represent(expression,field_type)) > File "C:\web2py\gluon\dal.py", line 3519, in represent > return BaseAdapter.represent(self, obj, fieldtype) > File "C:\web2py\gluon\dal.py", line 2018, in represent > ftype = self.db[p[0]][p[2]].type > File "C:\web2py\gluon\dal.py", line 8322, in __getitem__ > return self.__getattr__(str(key)) > File "C:\web2py\gluon\dal.py", line 8329, in __getattr__ > return ogetattr(self, key) > AttributeError: 'DAL' object has no attribute 'db' > > > The issues seems to be in line 2018 of dal.py > I looked through the code on github but the change happened a while ago, > so not sure if it is just something I am doing wrong or the code is buggy. > The code snippet is from the represent function (highlighted in yellow). > Any suggestions? > > elif field_is_type('reference'): # reference > # check for tablename first > referenced = fieldtype[9:].strip() > if referenced in self.db.tables: > return str(long(obj)) > p = referenced.partition('.') > if p[2] != '': > try: > * ftype = self.db[p[0]][p[2]].type* > return self.represent(obj, ftype) > except (ValueError, KeyError): > return repr(obj) > elif isinstance(obj, (Row, Reference)): > return str(obj['id']) > return str(long(obj)) > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

