For starters, I'm not sure the syntax is correct for multiple validators. The Web2py manual states they need to be in the form of a list.
http://web2py.com/books/default/chapter/29/7#Validators Also notice I have cleaned up the closing parends. db.abonnement.destinataire_id.requires = [ IS_IN_DB(db, 'destinataire.id', '%(email)s',), IS_NOT_IN_DB(db(db.abonnement.mailinglist_id==request.vars.mailinglist_id ), 'abonnement.destinataire_id') )] To change from a dropdown box to checkboxes, you would use widgets. Check out http://web2py.com/books/default/chapter/29/7#Widgets On Monday, August 6, 2012 12:52:54 PM UTC-4, goabbear wrote: > > Hi all, > I have tried django before and I want to give a try to web2py because it > looks more language natural, but I run into a problem (sorry if my question > is stupid) : > in db.py : > ######################## > > db.define_table('destinataire', > Field > <http://127.0.0.1:8000/examples/global/vars/Field>('email', unique=True, > required=True, length=30), > Field > <http://127.0.0.1:8000/examples/global/vars/Field>('nom', length=30), > Field > <http://127.0.0.1:8000/examples/global/vars/Field>('prenom', length=30), > Field > <http://127.0.0.1:8000/examples/global/vars/Field>('entreprise', length=30), > Field > <http://127.0.0.1:8000/examples/global/vars/Field>('fax', length=10), > format = '%(email)s') > > db.define_table('mailinglist', > Field > <http://127.0.0.1:8000/examples/global/vars/Field>('nom', unique=True, > required=True, length=30), > Field > <http://127.0.0.1:8000/examples/global/vars/Field>('description', > required=True, length=150), > Field > <http://127.0.0.1:8000/examples/global/vars/Field>('declencheur', > required=True, length=30), > Field > <http://127.0.0.1:8000/examples/global/vars/Field>('public', 'boolean'), > format = '%(nom)s') > > db.define_table('abonnement', > Field > <http://127.0.0.1:8000/examples/global/vars/Field>('destinataire_id', > db.destinataire), > Field > <http://127.0.0.1:8000/examples/global/vars/Field>('mailinglist_id', > db.mailinglist) > ) > > db.destinataire.email.requires = IS_NOT_IN_DB > <http://127.0.0.1:8000/examples/global/vars/IS_NOT_IN_DB>(db, > db.destinataire.email) > db.destinataire.email.requires = IS_EMAIL > <http://127.0.0.1:8000/examples/global/vars/IS_EMAIL>() > db.destinataire.email.requires = IS_NOT_EMPTY > <http://127.0.0.1:8000/examples/global/vars/IS_NOT_EMPTY>() > > db.mailinglist.nom.requires = IS_NOT_IN_DB > <http://127.0.0.1:8000/examples/global/vars/IS_NOT_IN_DB>(db, > db.mailinglist.nom) > db.mailinglist.nom.requires = IS_NOT_EMPTY > <http://127.0.0.1:8000/examples/global/vars/IS_NOT_EMPTY>() > db.mailinglist.description.requires = IS_NOT_EMPTY > <http://127.0.0.1:8000/examples/global/vars/IS_NOT_EMPTY>() > db.mailinglist.declencheur.requires = IS_NOT_EMPTY > <http://127.0.0.1:8000/examples/global/vars/IS_NOT_EMPTY>() > > #l'abonnement d'un destinataire à une mailinglist doit être unique > #tiré de http://osdir.com/ml/web2py/2010-07/msg01889.html > db.abonnement.destinataire_id.requires = IS_IN_DB > <http://127.0.0.1:8000/examples/global/vars/IS_IN_DB>(db, 'destinataire.id', > '%(email)s', > _and=IS_NOT_IN_DB > <http://127.0.0.1:8000/examples/global/vars/IS_NOT_IN_DB>(db(db.abonnement.mailinglist_id==request > <http://127.0.0.1:8000/examples/global/vars/request>.vars.mailinglist_id), > 'abonnement.destinataire_id')) > > ######################## > > As described, a "destinataire" can make multiple subscriptions "abonnement" > to "mailinglist", and a mailinglist have multiple subscribers. > > I don't understand how to give a user the possibility to make a subscription > to multiple mailinglists in one form like : > > enter email : _____ > > select mailinglists : > > ml1 X > > ml2 X > > ml3 . > > where the user select each mailinglist he wants to subscribe with a checkbox. > > Thanks for any help > > --