SOLVED: the magic formname in:
if form.accepts(request.vars, formname=<unique formname>):
...
with different formname for both forms solved the problem.
Thanks for the wonderful web2py!
On Mar 9, 5:06 pm, StUStD <[email protected]> wrote:
> I have two selection forms in one html page (see below), each with two
> submit buttons, one to "update" a selected database item, and another
> to select the item (i.e. store it in a session database) -- the code
> for "multiple submit buttons" in one form was found in a web2py
> thread. The first form works fine, but the second form after
> submission (select or update) is processed by the action(s) of the
> first form... I guess it probably has to do with the same "action"
> name used in both forms, but I don't know whether it's related to the
> _name, _id or "this.form.<action>.value" aspect, or to a combination
> of these... Help appreciated! Thanks.
>
> def process_A():
> """
> Single form for A objects with multiple submit buttons (update and
> select)
> that trigger one submit function with different parameters
> """
> o = < options list for A objects >
>
> form=FORM(SELECT(*o, _name="aid"),
>
> INPUT(_type='hidden',_name='action',_id='action',_value='undefined'),
>
> INPUT(_type='button',_value='Update',_onclick='''this.form.action.value="1";this.form.submit();''',),
> A(" "),
>
> INPUT(_type='button',_value='Select',_onclick='''this.form.action.value="2";this.form.submit();''',),)
>
> if form.accepts(request.vars):
> if request.vars.action=='1':
> < update an A obj >
> elif request.vars.action=='2':
> < select an A obj >
> redirect(URL('index'))
> else:
> raise Exception("Invalid action")
> #
> return form
>
> def process_B():
> """
> Single form for B objects with multiple submit buttons (update and
> select) that trigger one submit function
> with different parameters.
> """
> o = < options list for B objects >
>
> form=FORM(SELECT(*o, _name="bid"),
>
> INPUT(_type='hidden',_name='action',_id='action',_value='undefined'),
>
> INPUT(_type='button',_value='Update',_onclick='''this.form.action.value="1";this.form.submit();''',),
> A(" "),
>
> INPUT(_type='button',_value='Select',_onclick='''this.form.action.value="2";this.form.submit();''',),)
>
> if form.accepts(request.vars):
> if request.vars.action=='1':
> < update a B obj >
> elif request.vars.action=='2':
> < select a B obj >
> redirect(URL('index'))
> else:
> raise Exception("Invalid action")
> #
> return form