2016-03-29 30 views
0

目前正在使用TurboGears2ToscaWidgets2的項目。我有幾個靜態字段,名稱,日期和聯繫人信息的表單設置。在這個表單裏面,我添加了一個子表單,用戶可以在GrowingGridLayout中動態添加多個條目。表格,佈局和提交信息都很好,但我很難弄清楚如何從GrowingGridLayout中獲取信息以便保存。猜猜要點是,我怎麼知道表格中包含了多少條目?ToscaWidgets2從GrowingGridLayout捕獲數據

包括爲形式的代碼:

class OnrampForm(twf.Form): 
    title = "Onramp Submission Form" 

    class child(twd.CustomisedTableForm): 
     onramp_name = twf.TextField(validator=twc.Required) 

     class Destinations (twd.GrowingGridLayout): 
      environment = twf.SingleSelectField(label='Environment', validator=twc.Validator(required=True), options=[<OPTIONS>]) 
      location = twf.SingleSelectField(validator=twc.Required, label='Location', options=[<OPTIONS>]) 
      jms_type = twf.SingleSelectField(label='JMS Type', validator=twc.Validator(required=True), options=[<OPTIONS>]) 
      subscription_type = twf.SingleSelectField(label='Subscription Type', validator=twc.Validator(required=True), options=[<OPTIONS>]) 

     onramp_status = twf.SingleSelectField(prompt_text='Status', options=['Initial Release', 'Update'], validator=twc.Required) 
     current_date = datetime.date.today() 
     need_by_date = twd.CalendarDatePicker(validators=[twc.Required, twc.DateTimeValidator]) 
     need_by_date.default = current_date + datetime.timedelta(days=30) 
     organization = twf.TextField(validator=twc.Required) 
     poc_name = twf.TextField(validator=twc.Required) 
     poc_email = twf.EmailField(validator=twc.EmailValidator) 
     poc_phone = twf.TextField(validator=twc.Required) 
     poc_address = twf.TextField() 
     poc_city = twf.TextField() 
     poc_state = twf.TextField() 
     onramp_form = twf.FileField() 
     submit = twf.SubmitButton(value="Submit") 

    action = "/print_args" 
    submit = "" 

回答

0

如果您對控制器的形式@validate是你應得的數據爲Destination參數,它應該是一個字典列表。

另外我只注意到你有兩個嵌套窗體,這可能會混淆TW2。你想要做的可能是OnrampForm繼承CustomisedForm,然後有child繼承TableLayout。請參閱http://turbogears.readthedocs.org/en/latest/cookbook/TwForms.html#displaying-forms

PS:請注意,need_by_date.default = current_date + datetime.timedelta(days=30)將始終在服務器啓動後30天返回,因爲您實際存儲current_date = datetime.date.today()類變量,該變量在模塊導入時不會再計算。

您應該使用default = Deferred(lambda: datetime.date.today() + datetime.timedelta(days=30))來實現該目標