Yes, there are some solutions and you gave one of them: create the
record id as a hidden field in your form.

Other solution can be using request.args(0) in your _validate_form() function.

On Mon, Jul 15, 2013 at 8:01 AM, Jim Gregory <[email protected]> wrote:
> I have a form with five text input boxes:
>
> form = FORM(*[INPUT('amount-%s' % i, _type='number') for i in range(5)],
> INPUT(_type='submit'))
>
> The sum of these input boxes must equal the value of a field in a database
> record.
>
> I would like to pass the database record as a parameter to the onvalidation
> callback of the form, but as I understand it, this is not possible--the
> onvalidation function can only be passed one argument, the function itself.
>
> So, instead, I have written a second function to check validation after the
> form passes its initial validation:
>
> def _validate_form(form, record):
>     total = 0.0
>     for f in request.vars:
>         if request.vars[f].startswith('amount-') and request.vars[f] != '':
>             total += float(request.vars[f])
>     if total != record.total:
>     for f in request.vars:
>         if request.vars[f].startswith('amount-') and request.vars[f] != '':
>             form.errors[f] = 'total of amounts must equal record total'
>     return form.errors
>
> def test():
>     record = db.table[request.args(0)]
>     form = FORM(*[INPUT('amount-%s' % i, _type='number') for i in
> range(5)],INPUT(_type='submit'))
>     if form.validate():
>         form.errors = _validate_form(form, record)
>         if not form.errors:
>             redirect('next_page')
>     return form
>
> The trouble I am having is the test--'form.errors' returns True (and hence
> 'not form.errors' returns False) even when _validate_form returns an empty
> form.errors Storage object.
>
> I don't understand why it does.  How should I test for this condition
> instead?
>
> Is there another way I could do this using the onvalidation function, other
> than passing the record id as a hidden form field and doing the record
> selection in the validation function?  (In my actual application, the record
> must be selected before the form is created.)
>
> --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to