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

Reply via email to