That is a feature, although one those that I wish I had tought through
better when I designed validators.

On Jul 2, 12:18 pm, MikeEllis <[email protected]> wrote:
> That fixed it. Thanks Massimo.
> Is that behavior a design feature or just a quirk of
> implementation? :-)
> Mike
>
> On Jul 2, 11:39 am, mdipierro <[email protected]> wrote:
>
> > field.requires = [IS_IN_DB(db,'%s.%s'%(tbname,fname))]
>
> > no select
>
> > field.requires = IS_IN_DB(db,'%s.%s'%(tbname,fname))
>
> > select
>
> > On Jul 2, 9:46 am, MikeEllis <[email protected]> wrote:
>
> > > (Note: there's a thread from last year on this subject, but for some
> > > reason it's only providing links to reply to author and not to the
> > > group)
>
> > > The following model code is working correctly except that the
> > > generated SQLFORM has INPUT elements instead of select elements even
> > > though I've specifed an IS_IN_DB() requirement both as arguments to
> > > SQLField() and separately as a field.requires() statement.  The
> > > validations work as expected for all fields in all tables, it's just
> > > the SELECT element that's missing.
>
> > > The SQLFORM code is just
> > > form = SQLFORM(db.config)
>
> > > and the view is
> > > {{=form}}
>
> > > Here's the model code (db.py)
>
> > > def configfields():
> > >     """ Here we define all the fields the user is expected to fill in
> > >         during the configuration phase along with the tables that will
> > >         be created to store all the allowed values for each field.
>
> > >         Returns {table:(field,type), ...}
> > >     """
> > >     d = {
> > >     'users':('user_name','string'),
> > >     'boot':('boot_type','string'),
> > >     'ip':('base_device_ip','string'),
> > >     'port':('base_device_port','integer'),
> > >     }
> > >     return d
>
> > > ## The config table records the user, boot, ip, and port used in
> > > ## each testing session.
> > > args = []
> > > for tbname,(fname,ftype) in configfields().iteritems():
> > >     req = {'requires':IS_IN_DB(db,'%(tbname)s.%(fname)s'%locals())}
> > >     args.append(SQLField(fname,ftype,**req))
>
> > > kwargs = {'migrate':True}
> > > db.define_table('config', *args, **kwargs)
>
> > > for tbname,(fname,ftype) in configfields().iteritems():
> > >     ## These tables contain permitted values for the fields in
> > >     ## the config table.
> > >     db.define_table(tbname,SQLField
> > > (fname,ftype,unique=True),migrate=True)
>
> > >     ## create validation requirements such that the config table
> > >     ## field values must be in the corresponding single field
> > >     ## tables and that values entered in the single field tables
> > >     ## must not be already present.
> > >     table = getattr(db,tbname)
> > >     field = getattr(table,fname)
> > >     field.requires = [IS_NOT_IN_DB(db,'%s.%s'%(tbname,fname)),
> > >                       IS_NOT_EMPTY()]
> > >     field = getattr(db.config,fname)
> > >     field.requires = [IS_IN_DB(db,'%s.%s'%(tbname,fname))]
>
> > > What am I doing wrong?
>
> > > Thanks,
> > > Mike
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to