The IS_IN_DB validator takes an _and argument to get around this problem, but there is no _and argument for IS_IN_SET(). Instead, you can explicitly set the widget for the field:
Field('f_file_format, requires=[IS_IN_SET(list_of_acceptable_options), CUSTOM_VALIDATOR(...)], widget=SQLFORM.widgets.options.widget) As long as the IS_IN_SET validator is the first one in the list, the widget will build its options using the IS_IN_SET options. For more on widgets, see http://web2py.com/books/default/chapter/29/07#Widgets. Anthony On Tuesday, January 29, 2013 1:36:24 PM UTC-5, Lamps902 wrote: > > Thanks, Anthony. I was under the impression that list:string is the > convention if you want the field to render as a selector with SQLFORM(). > You're right that it's possible to change the field from list:string to > string and use IS_IN_SET() to maintain the field as a select element. > However, I still cannot apply a list of validators after doing this. Having > changed the field from list:string to string, when I apply the validators > as such: Field(... requires=[IS_IN_SET(...)] ...), SQLFORM now renders the > field as an input field rather than a drop-down menu/select element. > > On Tuesday, January 29, 2013 9:39:09 AM UTC-5, Anthony wrote: >> >> If you don't want to allow the user to select multiple options, then why >> is the field type list:string rather than just string? If you make it just >> a string type, then you will be able to apply a list of validators, as >> below. >> >> Anthony >> >> On Tuesday, January 29, 2013 5:39:59 AM UTC-5, Lamps902 wrote: >>> >>> Thank you for the replies, guys! I think my abstract/trivial example may >>> have obfuscated things a bit. I'm trying to use the IS_IN_SET() validator >>> in combination with a custom validator (yet to be fully written) to make it >>> so that all the elements of a dropdown menu/select are taken from a given >>> set of options (a list of file formats), and for the selected option (file >>> format), the custom validator will make sure the file is in that format. >>> Something like this might be a better description than the initial post: >>> >>> Field('f_file_format, type='list:string', >>> >>> requires=[IS_IN_SET(theset=list_of_acceptable_options,zero=T('make a >>> selection'), error_message=T(some_error_message)), >>> CUSTOM_VALIDATOR(request.vars.f_file_format, >>> request.vars.file, error_message=T(some_error_message2))] >>>> >>>> ) >>> >>> To clarify - I'm not seeking to let the user be able to select multiple >>> options from the drop down list. Maybe it's better to implement the custom >>> validator functionality I'm looking for in the controller, or can it be >>> done in the model? Thank you. >>> >> -- --- 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 web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.