onvalidation = my_form_processing

registers a callback (called after validation and before accepting).
This does not work

def my_form_processing(table_name, form):     form.vars.field1 =
table_name # I know useless, it just

because the callback function must take a single parameter, the form.
You can do instead

def my_form_processing(form):
    form.vars.field1 = form.table.name # I know useless, it just

Hope this helps.


On Dec 23, 1:32 pm, Richard <ml.richard.vez...@gmail.com> wrote:
> Hello,
>
> In the book there is this example :
>
> db.define_table('numbers',
>     Field('a', 'integer'),
>     Field('b', 'integer'),
>     Field('c', 'integer', readable=False, writable=False))
>
> def my_form_processing(form):
>     c = form.vars.a * form.vars.b
>     if c < 0:
>        form.errors.b = 'a*b cannot be negative'
>     else:
>        form.vars.c = c
>
> def insert_numbers():
>    form = SQLFORM(db.numbers)
>    if form.process(onvalidation=my_form_processing).accepted:
>        session.flash = 'record inserted'
>        redirect(URL())
>    return dict(form=form)
>
> Where "my_form_processing" function is called without bracket and
> arguments...
>
> I try to do this that failed :
>
> def my_form_processing(table_name, form):
>     form.vars.field1 = table_name # I know useless, it just
> demonstration for purpose of my question...
>
> ...
>
>  if form.process(onvalidation=my_form_processing(request.args(0),
> form)).accepted:
>
> Then I did :
>
> def my_form_processing(form):
>     form.vars.field1 = request.args(0)
>
> ...
>
>  if form.process(onvalidation=my_form_processing).accepted:
>
> That actually works...
>
> I would like to make sure that I understand onvalidation properly...
>
> Is "my_form_processing" just a extension of the "insert_numbers()"
> function?
>
> And if so, does it have access to all the same variables
> (environnement) of "inser_numbers()"??
>
> Thank you!
>
> Richard

Reply via email to