Here the codes. Is there a quick way add multiple child objects to a parent in one page?
db.define_table('t_invoices',
Field('f_customer', type='reference t_customers',
label=T('Customer')),
Field('f_date', type='date',
label=T('Date')),
Field('f_invoice_no', type='string',
label=T('Invoice No')),
Field('f_net', type='string',
label=T('Net')),
Field('f_tax', type='string',
label=T('Tax')),
Field('f_total', type='string',
label=T('Total')),
auth.signature,
format='%(f_customer)s %(f_date)d',
migrate=settings.migrate)
db.define_table('t_invoices_archive',db.t_invoices,Field('current_record','reference t_invoices',readable=False,writable=False))
########################################
db.define_table('t_invoice_details',
Field('f_invoice', type='reference t_invoices',requires=IS_NOT_EMPTY(),readable=False,writable=False,
label=T('Invoice')),
Field('f_description', type='string',
label=T('Description')),
Field('f_quantity', type='integer',
label=T('Quantity')),
Field('f_price', type='double',
label=T('Price')),
Field('f_total', type='double',compute=lambda r: r['f_quantity']*r['f_price'],writable=False,
label=T('Total')),
Field('f_tax_percentage', type='integer',
label=T('Tax Percentage')),
Field('f_tax', type='double',compute=lambda r: r['f_total']*r['f_tax_percentage']/100,writable=False,
label=T('Tax')),
Field('f_total_w_tax', type='double',compute=lambda r: r['f_total']+r['f_tax'],writable=False,
label=T('Total W Tax')),
auth.signature,
format='%(f_invoice)s',
migrate=settings.migrate)
db.t_invoice_details.f_tax_percentage.requires=IS_IN_SET(['1','8','18'])
db.define_table('t_invoice_details_archive',db.t_invoice_details,Field('current_record','reference t_invoice_details',readable=False,writable=False))
def newInvoice():
form=SQLFORM.factory(db.t_invoices,db.t_invoice_details)
if form.process().accepted:
id=db.t_invoices.insert(**db.t_invoices._filter_fields(form.vars))
form.vars.f_invoice=id
id=db.t_invoice_details.insert(**db.t_invoice_details._filter_fields(form.vars))
response.flash=T('Thanks for filling out the form')
return dict(form=form)