On Apr 2, 11:06 pm, mdipierro <[email protected]> wrote:
> You can also do
>
> db.table.field1.requires=IS_NULL_OR(IS_IPV4())
> db.table.field2.requires=IS_NULL_OR(IS_IPV4())
>
> def at_least_one(form):
>     if not form.vars.field1 and not form.vars.field2:
>          form.errors.field2='cannot be empty if field1 is empty'
>          form.errors.field1='cannot be empty if field2 is empty'
>
> if form.accepts(request.vars,session,onvalidation=at_least_one): ....
>
> In this case it is general, the call is gone inside accept, you do not
> need dbio=False and you can associate the errors to any field you
> want.  The check is performed on values that have already been
> filtered by normal validation.
> onvalidation is executed after regular validation, but before dbio. If
> onvalidation sets an error, no dbio is performed, and accepts returns
> false.

I like this best - it is as "compact" as your first suggestion, but
more readable, clear - which I like.
It is also less "cluttered" than what I suggested - more modular.

I think Jonathan's question / request is actually a very good example
of when "onvalidation" is useful, clean, general.

Johathan - really, really good question! ;-)

- Yarko
>
> This is not in the book because we introduced sometime in fall 2009.
>
> massimo
>
> On Apr 2, 10:10 pm, Jonathan Lundell <[email protected]> wrote:
>
> > On Apr 2, 2010, at 8:05 PM, mdipierro wrote:
>
> > > Yes. No one solution is obviously better. It is good to have some
> > > options.
>
> > Yarko's approach allows for a more general error message, at the expense of 
> > not associating it with a particular input field. In my case, I think I see 
> > a way of phrasing the error messages so that it works OK with Massimo's 
> > approach.
>
> > > Massimo
>
> > > On Apr 2, 8:45 pm, Yarko Tymciurak <[email protected]>
> > > wrote:
> > >> On Apr 2, 7:14 pm, mdipierro <[email protected]> wrote:
>
> > >>> db.table.field1.requires=IS_NULL_OR(IS_IPV4())
> > >>> db.table.field2.requires=IS_NULL_OR(IS_IPV4()) if request.vars.field1
> > >>> else IS_IPV4()
>
> > >> Thank you for this, Massimo - this is a nice, compact idiom for using
> > >> existing validators; I hadn't considered (don't know why not - it's
> > >> obvious looking at it) this idiom in assigning to a "requires" field.
>
> > >> My approach is more general - ANY situation where you want to do some
> > >> combinatorial logic, or external checking: form.accepts( ...,
> > >> dbio=False)...
>
> > >> Good question, Jonathan! :-)
>
> > >> - Yarko
>
> > >>> On Apr 2, 10:32 am, Jonathan Lundell <[email protected]> wrote:
>
> > >>>> I think I've seen an answer to this one, but I can't find it.
>
> > >>>> I've got a form with two Field's, both IS_IPV4(). The validation I'm 
> > >>>> after is that one or both must be present; the only invalid case is 
> > >>>> both of them null.
>
> > >>>> How do I write that?

-- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" 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/web2py?hl=en.

Reply via email to