Thank you Massimo. Because having it work isn't enough I have a question out of morbid curiosity/desire to learn the framework better.
Why must the fieldnames match between the Field('fieldname'...) definition and form.errors.fieldname in my validating function in order to get form.errors.fieldname to flash a form error? Thank you. David On Oct 24, 10:25 am, Massimo Di Pierro <massimo.dipie...@gmail.com> wrote: > 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 > >