Please open a ticket about this it get tracked.
On Saturday, 1 September 2012 14:14:26 UTC-5, Donatas Burba wrote:
>
> I noticed a problem with self referencing tables and option
> lazy_tables=True. This is my code:
>
> ----- model -----
>
> db.define_table('biography_available_award',
> Field('title', label=T('biography_available_award__title')),
> Field('parent_id', 'reference biography_available_award'),
> Field('order_no', 'integer', writable=False, compute = lambda row: ...
> ),
> format='%(title)s'
> )
>
> ----- controller -----
>
> def awards():
> ...
> awards =
> db(db.biography_available_award.parent_id==None).select(orderby=db.biography_available_award.order_no)
> ...
>
> It fails with error:
>
> 1.
> 2.
> 3.
> 4.
> 5.
> 6.
> 7.
> 8.
> 9.
> 10.
> 11.
> 12.
> 13.
> 14.
> 15.
> 16.
> 17.
> 18.
> 19.
> 20.
> 21.
> 22.
> 23.
> 24.
>
> Traceback (most recent call last):
> File "/home/donatas/ProCursus/projects/web2py/gluon/restricted.py", line
> 209, in restricted
> exec ccode in environment
> File
> "/home/donatas/ProCursus/projects/web2py/applications/bow/controllers/plugin_biography.py"
>
> <http://localhost:8000/admin/default/edit/bow/controllers/plugin_biography.py>,
> line 4788, in <module>
> File "/home/donatas/ProCursus/projects/web2py/gluon/globals.py", line 185,
> in <lambda>
> self._caller = lambda f: f()
> File "/home/donatas/ProCursus/projects/web2py/gluon/tools.py", line 2780,
> in f
> return action(*a, **b)
> File
> "/home/donatas/ProCursus/projects/web2py/applications/bow/controllers/plugin_biography.py"
>
> <http://localhost:8000/admin/default/edit/bow/controllers/plugin_biography.py>,
> line 112, in awards
> awards =
> db(db.biography_available_award.parent_id==None).select(orderby=db.biography_available_award.order_no)
> File "/home/donatas/ProCursus/projects/web2py/gluon/dal.py", line 7112, in
> __getattr__
> return self.lazy_define_table(tablename,*fields,**args)
> File "/home/donatas/ProCursus/projects/web2py/gluon/dal.py", line 7071, in
> lazy_define_table
> table = table_class(self, tablename, *fields, **args)
> File "/home/donatas/ProCursus/projects/web2py/gluon/dal.py", line 7452, in
> __init__
> field.requires = sqlhtml_validators(field)
> File "/home/donatas/ProCursus/projects/web2py/gluon/dal.py", line 6303, in
> sqlhtml_validators
> referenced = db[field_type[10:]]
> File "/home/donatas/ProCursus/projects/web2py/gluon/dal.py", line 7106, in
> __getitem__
> return self.__getattr__(str(key))
> File "/home/donatas/ProCursus/projects/web2py/gluon/dal.py", line 7113, in
> __getattr__
> return ogetattr(self, key)
> AttributeError: 'DAL' object has no attribute 'biography_available_award'
>
>
> Now I use a workaround in models file:
>
> db._lazy_tables = False
> db.define_table('biography_available_award',
> Field('title', label=T('biography_available_award__title')),
> Field('parent_id', 'reference biography_available_award'),
> Field('order_no', 'integer', writable=False, compute = lambda row: ...
> ),
> format='%(title)s'
> )
> db._lazy_tables = True
>
--