You can do:

if hasattr(field.requires, 'options'):

which will identify IS_IN_SET and IS_IN_DB validators. If you only want to 
identify IS_IN_SET, you can do:

if isinstance(field.requires, IS_IN_SET):

To get the list of options, you can do field.requires.theset (for the 
values), field.requires.labels (for the labels), or field.requires.options()for 
a list of tuples of values and labels.

You can also create a SELECT object via SQLFORM.widgets.options.widget(field, 
value=field.default).

Anthony

On Friday, July 26, 2013 4:55:41 AM UTC-4, Sarbjit singh wrote:
>
> Actually I am not using the SQLFORM. I am using the code for dynamic 
> search form from (
> http://www.web2pyslices.com/slice/show/1403/dynamic-search). I want to 
> modify the code such that for the fields with validators, it should show 
> the selection menu. So I want to add  a check in the code below to detect 
> if a field is having validator set, then use the SELECT command with the 
> validator set values as argument. So far, I am not able to achieve it.
>
> Can you please recommend something in context here?
>
> Here is the code from the slice :
>
> def dynamic_search(table):
>     tbl = TABLE()
>     selected = []
>     ops = ['equals','not equal','greater than','less than',
>            'starts with','ends with','contains']
>     query = table.id > 0    
>     for field in table.fields:
>         chkval = request.vars.get('chk'+field,None)
>         txtval = request.vars.get('txt'+field,None)
>         opval = request.vars.get('op'+field,None)
>         row = TR(TD(INPUT(_type="checkbox",_name="chk"+field,
>                           value=chkval=='on')),
>                  TD(field),TD(SELECT(ops,_name="op"+field,
>                                      value=opval)),
>                  TD(INPUT(_type="text",_name="txt"+field,
>                           _value=txtval)))
>         tbl.append(row)
>         if chkval:
>             if txtval:
>                 query &= build_query(table[field], 
>                                 opval,txtval)
>             selected.append(table[field])           
>     form = FORM(tbl,INPUT(_type="submit"))
>     results = db(query).select(*selected)
>     return form, results
>
> Thanks,
> Sarbjit
>
>
>
> On Friday, July 26, 2013 1:37:26 PM UTC+5:30, Massimo Di Pierro wrote:
>>
>> Exactly. Complete code in case you have errors:
>>
>> #model
>> db.define_table('persons',Field('gender'))
>> db.persons.gender.requires = IS_IN_SET(['Male', 'Female'])
>>
>> #controller default.py
>> def index():
>>     form = SQLFORM(db.persons).process()
>>     return locals()
>>
>> #views default/index.html
>> {{extend 'layout.html'}}
>> {{=form}}
>>
>>
>> Mind we tend to call table names with singular not plural (person, not 
>> persons). This will make your code more readable.
>>
>> On Friday, 26 July 2013 02:57:21 UTC-5, viniciusban wrote:
>>>
>>> It's done automaticaly by web2py. 
>>>
>>> On Fri, Jul 26, 2013 at 2:29 AM, Sarbjit singh <[email protected]> 
>>> wrote: 
>>> > I have a db where I have set validator IS_IN_SET on a particular 
>>> field. I am 
>>> > generating table rows (to be used as form), so I need to check if a 
>>> > particular field is having IS_IN_SET validator set and I want to 
>>> retrieve 
>>> > the set values. Reason I want to do this is that I am generating a 
>>> dynamic 
>>> > form based on the table fields and for the fields having IS_IN_SET 
>>> validtor, 
>>> > I want to show the "Drop Down" menu rather than Text Field and wants 
>>> to 
>>> > populate it with the Validator values. 
>>> > 
>>> > db.define_table('persons',Field('gender') 
>>> > db.persons.gender.requires = IS_IN_SET(['Male', 'Female']) 
>>> > 
>>> > -Sarbjit 
>>> > 
>>> > -- 
>>> > 
>>> > --- 
>>> > You received this message because you are subscribed to the Google 
>>> Groups 
>>> > "web2py-users" group. 
>>> > To unsubscribe from this group and stop receiving emails from it, send 
>>> an 
>>> > email to [email protected]. 
>>> > For more options, visit https://groups.google.com/groups/opt_out. 
>>> > 
>>> > 
>>>
>>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to