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 > >