目前正在与TurboGears2和ToscaWidgets2合作一个项目。我有一个表单设置,其中包含一些静态字段、姓名、日期和联系人信息。在这个表单中,我添加了一个子表单,用户可以在其中动态地在GrowingGridLayout中添加大量条目。表单、布局和提交信息都很好,但是一旦信息被传递保存,我就很难弄清楚如何从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 = ""发布于 2016-03-30 23:23:51
如果您针对表单控制@validate,则应该将数据放入Destination参数中,该参数应该是一个字典列表。
另外,我刚刚注意到你有两个嵌套的表单,这可能会让TW2非常困惑。您想要做的可能是让OnrampForm继承CustomisedForm,然后让child继承TableLayout。请参阅http://turbogears.readthedocs.org/en/latest/cookbook/TwForms.html#displaying-forms
PS:请注意,在服务器启动后30天内,need_by_date.default = current_date + datetime.timedelta(days=30)将始终返回,因为您实际存储的是一个current_date = datetime.date.today()类变量,该变量在导入模块时计算出来,并且不会更多。
您应该使用default = Deferred(lambda: datetime.date.today() + datetime.timedelta(days=30))来实现这一点
https://stackoverflow.com/questions/36289065
复制相似问题