2013-07-14 64 views
0

我非常新的web2py和一些更多的經驗是需要我的應用程序。 我的任務是「簡單的」。web2py - 從表中創建下拉字段,但也添加新的記錄到表

我想創建一個應用程序,用戶可以在其中插入3字段的表格。我的表field_1與field2和field3的某些值相同。 第一種解決方案是使用IS_IN_SET字段屬性中的define_table,但field_1值不能從項目開始就知道。 第二種解決方案是使用SQLFORM.factory創建表單,但在這種情況下,如果需要field_1中的新值,用戶不能添加它並且必須添加新的控制器def。

我的第一個通過創建一個新的add_field1表與一個submision窗體並連接到我的第一個表。

但是,在.factory中是否有任何屬性給用戶一個字段的下拉菜單,但也插入一個新的記錄到相同的形式的字段?

回答

2

我不知道如果這是你在找什麼,但在我看來,你想有一個形式爲用戶值添加到其中有一個下拉菜單是數據庫充滿你的數據庫的值。

如果是這種情況,那麼你可以通過讓這成爲你SQLFORM聲明做到這一點:

my_form = SQLFORM(db.my_table) 

然後,你可以定義MY_TABLE爲:

define_table('my_table', 
    Field('field1', 'reference other_table', requires=IS_IN_DB(db, db.other_table, '%(field_name)s'), 
) 

這將創建一個表,當使用sqlform創建時,將爲表格提供一個下拉列表,其中列表other_table中的「field_name」列中的值爲下拉列表。

希望這有助於:)

0

我不知道,你可以有字段的下拉不知道什麼字段是開始與...

如何在web2py中使用的參考定義字段。但它會自動假定您在數據庫中有所有選擇。那麼你只需要在同一頁面上有兩個表單,一個添加選項,另一個選擇一個選項。

一個例子是具有在表MYLINE一個場與另一個表的顏色定義的顏色:

db.define_table('colors', 
    Field('name','string'), 
    Field('code','string'), 
    format='%(name)s') 
if db(db.colors).isempty(): 
    # create instance of table 
    for k,v in dict(red="#FF0000",black="#000000",blue="#0000FF").items(): 
     db.color.insert(name=k,code=v) 

db.define_table('myLine', 
    Field('name','string'), 
    Field('color','reference colors')) 
相關問題