the problem is that your requirements need the table to be fully defined 
before applying the requirement itself.

The new on_define syntax should help with lazy tables, however, right now I 
can't test it.

Il giorno giovedì 30 agosto 2012 10:06:03 UTC+2, Annet ha scritto:
>
> This issue has been reported in this thread:
>
>
> https://groups.google.com/forum/#!searchin/web2py/IS_NOT_IN_DB/web2py/YNfreBJ2LYo/rEMOTVibHDEJ
>
> ... has it been solved, yet?
>
> I defined the following table:
>
> db.define_table('nodeKeyword',
>     Field('nodeID','reference node',default='',requires=[IS_IN_DB(db,'
> node.id','%(id)s',zero=T('select a 
> value')),IS_NOT_IN_DB(db(db.nodeKeyword.word==request.vars.word),db.nodeKeyword.nodeID,error_message=T('combination
>  
> node and keyword already in 
> database'))],ondelete='CASCADE',notnull=True,writable=False,readable=False),
>     
> Field('word',length=128,default='',requires=[IS_IN_DB(db,'keyword.word','%(word)s',zero=T('select
>  
> a 
> value'))],ondelete='RESTRICT',notnull=True,widget=SQLFORM.widgets.options.widget,label='Trefwoord
>  
> * '),
>     migrate='nodeKeyword.table')
>
> ... which results in the following error:
>
> Traceback (most recent call last):
>   File "/Library/Python/2.6/site-packages/web2py/gluon/restricted.py", line 
> 209, in restricted
>     exec ccode in environment
>   File 
> "/Library/Python/2.6/site-packages/web2py/applications/init/models/10_tables_db.py"
>  <http://127.0.0.1:8000/admin/default/edit/init/models/10_tables_db.py>, line 
> 134, in <module>
>     Field('nodeID','reference 
> node',default='',requires=[IS_IN_DB(db,'node.id','%(id)s',zero=T('select a 
> value')),IS_NOT_IN_DB(db(db.nodeKeyword.word==request.vars.word),db.nodeKeyword.nodeID,error_message=T('combination
>  node and keyword already in 
> database'))],ondelete='CASCADE',notnull=True,writable=False,readable=False),
>   File "/Library/Python/2.6/site-packages/web2py/gluon/dal.py", line 7099, in 
> __getattr__
>     return ogetattr(self, key)
> AttributeError: 'DAL' object has no attribute 'nodeKeyword'
>
> When I move the requires attribute outside the table definition:
>
>  db.nodeKeyword.nodeID.requires=[IS_IN_DB(db,'node.id','%(id)s',zero='select 
> a 
> value'),IS_NOT_IN_DB(db(db.nodeKeyword.word==request.vars.word),db.nodeKeyword.nodeID,error_message='combination
>  node and keyword already in database')]
>
> ... the problem is solved, however, this is not compatible with lazy_tables, 
> is it?
>
> Kind regards,
>
> Annet.
>
>
>

-- 



Reply via email to