I solved my problem. Since the form.vars were passing through to the
controller, I just simply did my own manual insert:
def test_add_user():
form = SQLFORM(db['user'])
form.append(SQLFORM(db['address']))
#submit data
if form.accepts(request.vars):
#check whether the form had errors
if form.errors:
response.flash = 'Form has errors'
return dict(form=form)
else:
db.address.insert(user_id=form.vars.id,address=form.vars.address)
session.flash = "User Added"
redirect(URL('admin', 'test_add_user'))
#return the view
return dict(form=form)
Now all I have to do is remove the first submit button.
On Jan 21, 2:30 pm, Lennon <[email protected]> wrote:
> I have two reasons for not wanting to use SQLFORM factory. First, I
> can't figure out or find how to use SQLFORM factory as an update/
> delete form when combining multiple table (although I'd love to see
> how if it can be done). Second, I will be wanting to do some really
> complicated forms in the future and would like to understand how to
> combine SQLforms.
>
> With the insert form code listed below, I've been able to combine the
> two forms on one page. They both render (with two submit buttons) and
> the form validation works for both of them regardless of which submit
> button I hit (which made me think I had successfully combined them).
>
> But when the form accepts the data, it only does an insert on the
> original form and doesn't work on the appended form.
>
> When I run in debug mode I see that FORM.vars correctly has captured
> all of the values for both forms. But FORM.table and FORM.fields both
> only have the values for the first SQLFORM.
>
> Thanks for any help you can give me.
>
> def test_add_user():
>
> form = SQLFORM(db['user'])
> form.insert(len(form),SQLFORM(db['address']))
>
> #submit data
> if form.accepts(request.vars):
>
> #check whether the form had errors
> if form.errors:
> response.flash = 'Form has errors'
> return dict(form=form)
> else:
>
> session.flash = "User Added"
> redirect(URL('admin', 'test_add_user'))
>
> #return the view
> return dict(form=form)