用ToscaWidgets初始化表单

2024-05-20 19:23:26 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

如何用值从ToscaWidgets预先填充CheckBoxTable。在

背景:

我到处都找遍了,似乎不知道如何用ToscaWidgets初始化特定的表单字段。大多数表单字段对初始化的响应似乎都很好,比如当我在模板中呈现表单并传入fieldValue=x时,如果我创建一个包含单个TextField的表单,其中fieldValue是TextField的名称,x是TextField将填充x的某个字符串。我的问题是所有多个选择字段,尤其是checkbox表格。不管我传入什么,它都不会初始化多重选择。下面是我所说的一个例子,这是一个用户编辑页面,其中有一个用于组的复选框表,因此您可以从从数据库获取的多个组的列表中选择多个组或不选择组:

我拥有的:

我的小工具是:

from tw import forms
class UserForm(forms.TableForm):

    show_errors = True
    submit_text = "Create User"

    clientOptions = [(-1, "Select a Client")]
    groupOptions = [(-1, "Select a Group")]

    fields = [forms.TextField('name', label_text='User Name', validator=String(not_empty=True), size=40),
              forms.Spacer(),
              forms.SingleSelectField('clientID', label_text='Client Name', validator=Int(min=0), options=clientOptions),
              forms.Spacer(),
              forms.CheckBoxTable('groups', lable_text='Groups', validator=Set(), options=groupOptions, num_cols=3),
              forms.Spacer(),
              forms.PasswordField('password', label_text="Password", validator=String(not_empty=True, min=6), size=40),
              forms.PasswordField('passwordAgain', label_text="Repeat Password", validator=String(not_empty=True, min=6), size=40),
              forms.HiddenField('id')]

editUserForm = UserForm("createUserForm", action='alterUser', submit_text="Edit User")

在我的控制器中我有:

^{pr2}$

在我的模板(Mako)中,我有:

${tmpl_context.form(modelAttributes, child_args=formChildArgs) | n}

我的尝试:

在我的userattributes字典中,我尝试过:

groups=[g.id for g in result.groups]
groups=[g.name for g in result.groups]
groups=[(g.id, g.name) for g in result.groups]
groups=[[g.id, g.name) for g in result.groups]
groups=result.groups

我得到的:

所有这些代码的结果都是一个用户编辑表单,其中除了CheckBoxTable之外,数据都预先填充了用户数据。CheckBoxTable将我数据库中的所有组都显示为空,这是我需要它们显示的,但是要检查用户所属的组。我原以为model属性中的代码可以做到这一点,因为它对其他字段都是这样做的,但是在CheckBoxTable实例化中,我肯定缺少一些基本的东西。在

规格:

我使用TurboGears2和ToscaWidgets 0.9.7表单和Mako作为模板。在


Tags: textnameinidtrue表单forforms
1条回答
网友
1楼 · 发布于 2024-05-20 19:23:26

通过value param设置它们。在

import tw.forms
f = tw.forms.TableForm(fields=[tw.forms.CheckBoxTable("name",options=(("foo"),("bar")))]) 
f(value={"name":{"foo":True,"bar":False}})
>>> u'<form xmlns="http://www.w3.org/1999/xhtml" action="" method="post" class="tableform">\n    <table border="0" cellspacing="0" cellpadding="2">\n<tr id="name.container" class="even" title="">\n            <td class="labelcol">\n                <label id="name.label" for="name" class="fieldlabel">Name</label>\n            </td>\n            <td class="fieldcol">\n                <table id="name" class="checkboxtable">\n    <tbody>\n    <tr>\n        <td>\n
    <input id="name_0" value="foo" name="name" type="checkbox" checked="checked" />\n            <label for="name_0">foo</label>\n        </td>\n    </tr><tr>\n        <td>\n            <input id="name_1" value="bar" name="name" type="checkbox" />\n            <label for="name_1">bar</label>\n        </td>\n    </tr>\n
</tbody>\n</table>\n            </td>\n        </tr><tr id="submit.container" class="odd" title="">\n            <td class="labelcol">\n            </td>\n
       <td class="fieldcol">\n                <input type="submit" class="submitbutton" value="Submit" />\n            </td>\n        </tr>\n    </table>\n</form>'

相关问题 更多 >