2011-10-08 48 views
1

試圖在web2py中創建一個輪詢應用程序。以web2py形式表格的多個實例

型號

db.define_table('t_query', 
    Field('f_content', type='text', requires=IS_NOT_EMPTY(), 
      label=T('Content')), 
    SQLField('is_active',db.auth_user,writable=False,readable=False), 
    auth.signature, 
    migrate=settings.migrate) 

db.define_table('t_option', 
    Field('f_ocontent', type='string',requires=IS_NOT_EMPTY(), 
      label=T('Option')), 
    auth.signature, 
    migrate=settings.migrate) 

控制器

def ask(): 
    form=SQLFORM.factory(db.t_query,db.t_option,db.t_option) 
    if form.process().accepted: 
     id = db.t_query.insert(**db.t_query._filter_fields(form.vars)) 
     form.vars.client=id 
     id = db.t_option.insert(**db.t_option._filter_fields(form.vars)) 
     response.flash='Thanks for filling the form' 
     id = db.t_option.insert(**db.t_option._filter_fields(form.vars)) 
     response.flash='Thanks for the question' 
    return dict(form=form) 

查看

{{extend 'layout.html'}} 

<h2>Start a Poll</h2> 
{{=form}} 

輸出
current

我試圖找出如何讓SQLFORM在窗體中多次使用領域從同一個表。

這是我所期望的:
gexpectation

我怎麼做呢?

問同樣的問題上web2py的@ Google網上論壇https://groups.google.com/forum/#!topic/web2py/48tO5ncC2t4

+2

順便說一句,我看到你有一個連續的'response.flash'賦值。第二將覆蓋第一次每次成功處理表單,因爲沒有if語句來確定何時發送一個flash消息與另一個...可能它現在對你的代碼無關緊要,但是我認爲我會指出來。 – Kasapo

回答

1

這聽起來像你希望能夠存儲字符串列表單個字段。據我所知,你不能多次重複同一個字段(數據在數據庫中的位置是哪裏?只有一個字段可以包含它,所以如果你想要0,你需要序列化它並把它塞在那裏。在單場.N值)

使用該得到的單場多個字符串:

db.define_table(... 
    ... 
    Field('f_ocontent', 'list:string') 
) 

這將在內部存儲數據這樣:

|option1val|option2val|option3val| 

,或者,如果空:

|| 

當您輸入的字符超過0個字符時,您可以按回車鍵,它會創建一個新的輸入。