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
>

-- 



Reply via email to