Good solutions. Not everything can be done with built-in validators.
On Oct 24, 12:13 am, TheSweetlink <yanosh...@gmail.com> wrote: > Thank you all for your help. > > I was able to resolve the problem quirky as it may be but here we go. > For science!!! > > To get a type='list:string' to fail validation if none passed from > your SQLFORM.factory form: > > 1) Used an onvalidation=... in my form.accepts(...) / > process(...).accepted / validate(...) > > Within the validation function: > > if not request.vars.choochoo: > form.errors.choochoo = "Please select 1 or more witches before > burning them." > > form.errors.fieldname <--- Unless the fieldname > matched .errors.fieldname, flashing form.errors.fieldname wouldn't > work. > > To reiterate more simply, Field('choochoo'...) had to match > form.errors.choochoo in order to have > form = SQLFORM.factory(...) > if form.validate(...): > do something > elif form.errors.choochoo: > response.flash = form.errors.choochoo > > ^^^^work when set from my onvalidation function > > 2) IS_NOT_EMPTY() constraint added after form = SQLFORM.factory(...) > > form.element('#no_table_myawesomeselect') > ['requires']=IS_NOT_EMPTY(error_message='Please select 1 or more > witches before burning them.') > > It wouldn't work when added to requires= in the Field(...) of my form > = definition but only when added after form is created but before > processing. > > Now my errors flash from response as they should according to the > onvalidation function that's called. > > Thanks again web2py community, you're wonderful as always. > > David > > On Oct 23, 11:21 pm, ニコノコ <nikolai...@gmail.com> wrote: > > > > > > > > > Eeugh. Sorry for the ugly suggestion. Post validation could > > > def person_processing(form): > > > if len(form.vars.field or '')<1: > > form.errors.field= 'Select one.' > > > On Oct 24, 10:32 am, Vasile Ermicioi <elff...@gmail.com> wrote: > > > > > How about: db.table.field.requires = IS_LENGTH(1) > > > > that will limit the field to one character, not to one value from set