In your validator: (db.companyactivity.activity==request.vars.activity)
the left hand side a reference field or an int and the right hand side is a string. Hard to follow but I think db.timetable.activity.requires=IS_IN_SET([row.activity for row in activity]) should be db.timetable.activity.requires=IS_IN_SET([row.id for row in activity], [row.activity for row in activity]) Massimo On Dec 11, 12:48 pm, annet <annet.verm...@gmail.com> wrote: > In my model I have a combination table that combines companies with > activities. Since I don't want a user to enter a combination twice I > defined the following validator: > > db.companyactivity.company.requires=[IS_IN_DB(db,db.company.id,'% > (companyname)s'),IS_NOT_IN_DB(db > (db.companyactivity.activity==request.vars.activity),db.companyactivity.company,error_message='already > in database')] > > I also have a table timetable which reads like: > > db.define_table('timetable', > Field > ('company',db.company,default='',notnull=True,ondelete='CASCADE', > writable=False, readable=False), > Field('activity',length=48,default='',notnull=True), > Field('day',db.dag,default='',notnull=True,ondelete='RESTRICT'), > Field('time',type='time',default='',notnull=True), > Field('duration',length=3,default='',notnull=True), > Field('location',length=24), > Field > ('level',db.level,default=1,notnull=True,ondelete='RESTRICT'), > migrate='timetable.table') > > In my cms the function to insert a class or update a class reads like: > > @auth.requires_membership('site_manager') > def create_timetable(): > response.view='default/form.html' > response.flash='Insert class' > db.timetable.company.default=auth.user.company > activity=activity_rowset() > db.timetable.activity.requires=IS_IN_SET([row.activity for row in > activity]) > form=create_form(db.timetable,message='Class inserted') > return dict(form=form) > > @auth.requires_membership('site_manager') > def update_timetable(): > response.view='default/form.html' > response.flash='Update or delete class' > record=db.timetable[request.args[0]] > if not record or not record.company==auth.user.bedrijf: > redirect(URL(r=request,f='crud_timetable')) > activity=activity_rowset() > db.timetable.activity.requires=IS_IN_SET([row.activity for row in > activity]) > form=update_form(db.timetable,record,'crud_timetable','Class > deleted or updated',True) > return dict(form=form) > > When I expose these function I get the following error ticket: > > Traceback (most recent call last): > File "/Library/Python/2.5/site-packages/web2py/gluon/restricted.py", > line 184, in restricted > exec ccode in environment > File "/Library/Python/2.5/site-packages/web2py/applications/cms/ > models/db.py", line 293, in <module> > db.bedrijfactiviteit.bedrijf.requires=[IS_IN_DB(db,db.bedrijf.id,'% > (bedrijfsnaam)s'),IS_NOT_IN_DB(db > (db.bedrijfactiviteit.activiteit==request.vars.activiteit),db.bedrijfactiviteit.bedrijf,error_message='combinatie > bedrijf en activiteit al in database')] > File "/Library/Python/2.5/site-packages/web2py/gluon/sql.py", line > 2310, in __eq__ > return Query(self, '=', value) > File "/Library/Python/2.5/site-packages/web2py/gluon/sql.py", line > 2688, in __init__ > right = sql_represent(right, left.type, left._db._dbname) > File "/Library/Python/2.5/site-packages/web2py/gluon/sql.py", line > 466, in sql_represent > return str(int(obj)) > ValueError: invalid literal for int() with base 10: 'BodyCircuit' > > When I remove the validator from the companyactivity table, both > functions work for the timetable table work. I don't see the > connection between the validator and the two functions, therefore I > don't understand why this error occurs. Does one of you know why this > happens? > > Kind regards, > > Annet. -- You received this message because you are subscribed to the Google Groups "web2py-users" group. To post to this group, send email to web...@googlegroups.com. To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/web2py?hl=en.