Thank you for the detailed explanation. One thing: What does __unpackargs__ do? I don't see this being used everytime, is it something optional? What do you usually supply it with?
On Mar 3, 3:08 am, Mike Orr <[email protected]> wrote: > On Tue, Mar 2, 2010 at 3:20 AM, Mark <[email protected]> wrote: > > Hi guys, > > > Which validator should I use for a select box, where the 'value' of > > the option selected is a number? > > > For instance: > > > <select name="type_id" id="type_id"> > > <option value="6">A</option> > > <option value="7">B</option> > > <option selected="selected" value="2">C</option> > > </select> > > > I am pulling the values to populate the select box from the database. > > Should I use OneOf or should I use Int? > > I made a combined validator for that. Here it is, along with a couple > other useful validators. > > === > import formencode.validators as v > class SelectInt(v.FancyValidator): > """A combination of the Int and OneOf validators with a custom message""" > __unpackargs__ = ("list",) > not_empty = True > > def _to_python(self, value, state): > try: > return int(value) > except ValueError: > self._invalid(value, state) > > _from_python = _to_python > > def validate_python(self, value, state): > if value not in self.list: > self._invalid(value, state) > > def _invalid(self, value, state): > message = "please choose an item from the list" > raise v.Invalid(message, value, state) > === > > By the way, a couple other validators I find useful: > > === > # For checkboxes > class Boolean(v.StringBoolean): > if_missing = False > > # For integer fields > class Int(v.Int): > messages = { > "integer": _("Please enter a numeric value"), > } > === > > > What about multi-select boxes? Should those also use the same > > validator as select boxes like above? > > I'm not sure about that. It would probably be best to ask on the > FormEncode list. FormEncode has a few ways to handle multiple values, > and I'm not sure which one would be appropriate for a multiselect. > > -- > Mike Orr <[email protected]> -- You received this message because you are subscribed to the Google Groups "pylons-discuss" 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/pylons-discuss?hl=en.
