2012-04-21 64 views
0

我創建的多形式的web2py多個表單

form = SQLFORM.factury(db.table1,db.table2) 

db.table2具有以下字段,該字段invoice_id鏈接到db.table1catalogue_id在形式後鏈接到另一表db.table0

db.define_table('table2', 
    Field('id','id'), 
    Field('user_id', db.auth_user, default=auth.user_id, writable=False,readable=False, 
      label=T('User Id')), 
    Field('invoice_id', db.table1, writable=False,readable=False, 
      label=T('Invoice')), 
    Field('catalogue_id', db.table0, 
      label=T('Catalogue')), 
    format='%(thiscatalogue)s', 
    migrate=settings.migrate) 

發送invoice_id應自動填寫web2py並獲取IDsent數據

,但有這個

Field('invoice_id', db.table1, ...) 

使該字段的值必須是submited

+0

什麼是「已發送」數據? 「invoice_id」應來自哪裏? – Anthony 2012-04-21 14:19:53

+0

'invoice_id'是'db.table1'中新插入記錄的'id' – ElTero 2012-04-21 15:57:27

回答

1

之前見的例子here。在這種情況下,如下所示:

form = SQLFORM.factory(db.table1, db.table2) 
if form.process().accepted: 
    invoice_id = db.table.insert(**db.table1._filter_fields(form.vars)) 
    form.vars.invoice_id = invoice_id 
    db.table2.insert(**db.table2._filter_fields(form.vars)) 

首先將新發票插入到table1中,它將返回新記錄的id。然後,在插入到表2之前,將form.vars.invoice_id設置爲新發票記錄的標識。

+0

謝謝 有沒有像'SQLFORM.factory'這樣的東西,用它來代替'crud.read()'? – ElTero 2012-04-22 15:49:43

+1

你是說你想要一個基於來自兩個單獨表格的相關記錄的只讀表單嗎?還沒有嘗試過,但我認爲你可以做'SQLFORM.factory(db.table1,db.table2,record = myrecord,readonly = True)'。您必須創建「myrecord」對象,以便它包含兩個表中的所有字段。 – Anthony 2012-04-22 16:04:22