Hi Annet,

I believe you want something like this:

def multitable_form_update():
  last=0
  if request.args:
    last=request.args[0]
  # retrieve next 2 addresses
  addrs=db(db.cli_addr.id>last).select(limitby=[0,2])
  if addrs:
    addr=addrs[0]
    curr=addr.id
    # set defaults to be shown on form
    db.client.name.default=db.client[addr.client].name
    db.cli_addr.street.default=addr.street
    db.cli_addr.city.default=addr.city
  else: # show EOF msg and loop
    session.flash='no more addresses on file'
    redirect(URL(request.action))
  # set client to read only
  db.client.name.writable=False
  form=SQLFORM.factory(db.client,db.cli_addr)
  # add link to next
  form[0][-1][1].append(A("Skip to
Next",_href=URL(request.action,args=curr)))
  if form.accepts(request.vars):
    # update record and redirect
    addr.update_record(**db.cli_addr._filter_fields(form.vars))
    session.flash='record updated'
    redirect(URL(request.action,args=last))
  return dict(form=form)


On Mar 2, 1:06 pm, annet <[email protected]> wrote:
> This example is taken from the web2py manual.
>
> model:
>
> db.define_table('client',
>      Field('name'))
> db.define_table('address',
>     Field('client',db.client,writable=False,readable=False),
>     Field('street'),Field('city'))
>
> controller:
>
> def register():
>     form=SQLFORM.factory(db.client,db.address)
>     if form.accepts(request.vars):
>         id = db.client.insert(**db.client._filter_fields(form.vars))
>         form.vars.client=id
>         id = db.address.insert(**db.address._filter_fields(form.vars))
>         response.flash='Thanks for filling the form'
>     return dict(form=form)
>
> Is it possible to pre-populate a form like this and then use update
> instead of insert to update the records in the tables?
>
> Kind regards,
>
> Annet.

Reply via email to