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

Reply via email to