The table format string/function should be stored in its ._format attribute, so you might also be able to do: db.audienceInstances.instances.requires=IS_IN_DB(db(db.instance.type==auth.user.product), 'instance.id',db.instance._format,multiple=True) Maybe that should actually be the default when label=None. Anthony
On Friday, July 15, 2011 11:56:13 AM UTC-4, Nico Palumbo wrote: > I fixed it like this: > > db.audienceInstances.instances.requires=IS_IN_DB(db(db.instance.type==auth.user.product),' > instance.id',lambda > r: '%s %s' % > (db.application[r.app].name,db.server[r.server].hostname),multiple=True) > > > On Fri, Jul 15, 2011 at 2:52 PM, Nicolas Palumbo <napa...@gmail.com> > wrote: > > Although this is working: > > > > db.audienceInstances.instances.requires=IS_IN_DB(db(db.instance.type==auth.user.product),' > instance.id',multiple=True) > > > > Is only showing ids , disregarding of the format defined here: > > > > > db.define_table('instance',Field('app',db.application),Field('server',db.server),Field('type','string'),format=lambda > > r: '%s %s' %(db.application[r.app].name,db.server[r.server].hostname)) > > > > IS there any way to fix that? > > > > Thanks, > > Nico > > > > On Thu, Jul 14, 2011 at 1:45 PM, Anthony <abas...@gmail.com> wrote: > >> The default validator for a list:reference field is > >> IS_IN_DB(db,'<table>.id',multiple=True). Instead of db, you can pass a > DAL > >> Set to that validator to filter the returned list -- something like: > >> > >> > db.audienceInstances.instances.requires=IS_IN_DB(db(db.instance.type==current_profile.type),' > instance.id',multiple=True) > >> > >> > >> See http://web2py.com/book/default/chapter/06#DAL,-Table,-Field and > >> http://web2py.com/book/default/chapter/07#Database-Validators. > >> > >> Anthony > >> > >> On Wednesday, July 13, 2011 2:39:50 PM UTC-4, Nico Palumbo wrote: > >>> > >>> I have currently this multiselect generated by list:references: > >>> > >>> db.py: > >>> > >>> > >>> > db.define_table('instance',Field('app',db.application),Field('server',db.server),Field('type','string'),format=lambda > >>> r: '%s %s' %(db.application[r.app].name,db.server[r.server].hostname)) > >>> ... > >>> db.define_table('audienceInstances', Field('instances','list:reference > >>> instance'),Field('user',db.auth_user,writable=False, readable=False)) > >>> > >>> default.py: > >>> > >>> monitoredInstances = db.audienceInstances(db.audienceInstances.user == > >>> auth.user.id) > >>> #Generates a form for the updation of the list of monitored > instances > >>> instancesForm = SQLFORM(db.audienceInstances, monitoredInstances, > >>> submit_button='Update', showid=False) > >>> if instancesForm.accepts(request.vars, session): > >>> response.flash = 'list updated' > >>> elif instancesForm.errors: > >>> response.flash = 'form has errors' > >>> > >>> That shows a list select among all instances. But what if I'd like to > >>> show a subset of that list, I mean I added a type field in instance > >>> table, and like to get the instances of the type the user has selected > >>> in its profile. > >>> > >>> The only way I can think of is creating a separate audienceInstances > >>> table for each type. Is there any othere way? > >>> > >>> Thanks, > >>> Nico > >> > > >