gpt4 book ai didi

python - 使用 ToscaWidgets 进行表单初始化

转载 作者:行者123 更新时间:2023-11-28 18:56:01 27 4
gpt4 key购买 nike

问题:

如何使用值预填充 ToscaWidgets 中的 CheckBoxTable。

背景:

我到处都看过,但我似乎无法弄清楚如何使用 ToscaWidgets 初始化特定的表单域。大多数表单字段似乎对初始化的响应都很好,就像当我在模板中呈现表单并传入 fieldValue=x 时创建一个其中包含单个 TextField 的表单,其中 fieldValue 是 TextField 的名称,x 是一些字符串TextField 将填充 x。我的问题是所有多选字段,特别是 CheckBoxTable。无论我传入什么,它都不会初始化多选。这是我正在谈论的示例,它是一个用户编辑页面,带有用于组的 CheckBoxTable,因此您可以从从数据库中获取的多个组列表中选择多个组或不选择组:

我有什么:

我的小部件是:

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

在我的 Controller 中我有:

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

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

${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 表单和 Mako 一起用于模板。

最佳答案

通过值参数设置它们。

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>'

关于python - 使用 ToscaWidgets 进行表单初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1071277/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com