This only works for tables that do not have field names in common
and have no references between them.


On Oct 16, 9:57 am, mdipierro <[email protected]> wrote:
> It often happens that you have two tables (for example 'client' and
> 'address' which are linked together by a reference and you want to
> create a single form that allows to insert info about one client and
> its default address. Here is how:
>
> 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)
>
> Notice the SQLFORM.factory (it makes ONE form using public fields from
> both tables and inherits their validators too).
> On form accepts this does two inserts (some data in one table and some
> data in the other).
>
> Massimo

Reply via email to