سؤال

السؤال:

كيف يمكنني لملء مسبق على CheckBoxTable من ToscaWidgets مع القيم.

الخلفية:

لقد بحثت في كل مكان وأنا لا يمكن أن يبدو لمعرفة كيفية تهيئة شكل معين الميدانية مع ToscaWidgets.معظم حقول النموذج يبدو للرد على ما يرام إلى التهيئة ، مثل إذا كنت إنشاء نموذج واحد في الحقل النصي عندما تجعل شكل في القالب و تمر في fieldValue=x حيث fieldValue هو اسم الحقل النصي و x هو بعض سلسلة الحقل النصي سوف تكون مليئة 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")

في وحدة تحكم علي:

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 أشكال ماكو على النموذجيه.

هل كانت مفيدة؟

المحلول

مجموعة منهم عبر قيمة المعلمة.

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