<强>问题:

如何预填一个CheckBoxTable从ToscaWidgets与值。

<强>背景

我到处找,我似乎无法弄清楚如何初始化一个特定的表单字段与ToscaWidgets。大多数表单域似乎当我呈现在模板的形式回应蛮好的初始化,就像如果我创建一个有一个单一的文本字段的格式,并通过在fieldValue方法= x,其中fieldValue方法是TextField和x的名字是一些字符串该文本字段将充满X。我的问题是所有的多个选择领域,特别是CheckBoxTable。不管是什么我通过它不会初始化多个选择。以下是我在谈论的一个例子,它是用CheckBoxTable用户编辑页面组,以便您可以选择几个或没有组出从DATABSE取出几组的列表:

<强>什么我有:

我的窗口小部件是:

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")

在我的控制器我有:

result = model.DBSession.query(model.User).filter_by(id=kw['id']).first()
tmpl_context.form = editUserForm
clientOptions=model.DBSession.query(model.Client.id, model.Client.name)
groupOptions=model.DBSession.query(model.Group.id, model.Group.name)
formChildArgs = dict(clientID=dict(options=clientOptions), groups=dict(options=groupOptions))

userAttributes=dict(id=result.id, name=result.name, groups=[g.id for g in result.groups], clientID=result.clientID, password=result.password, passwordAgain=result.password)

return dict(verb="Edit", modelName = "User", modelAttributes=userAttributes, formChildArgs=formChildArgs, page='editUser')

和在我的模板(真子)我有:

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

我已经试过:

在我的字典userAttributs我试过:

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拥有所有我的数据库中显示组和空的,什么我需要对它们进行显示,但是有集团用户是分开的检查的。我想在模型属性的代码将做到这一点,因为这是它做什么每隔领域,但必须有我失踪约CheckBoxTable实例一些根本的东西。

<强>功能

我使用的TurboGears 2 ToscaWidgets 0.9.7形式和真子为模板。

有帮助吗?

解决方案

经由值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>'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top