Frage

Frage:

Wie prefill ich ein CheckBoxTable von ToscaWidgets mit Werten.

Hintergrund:

Ich habe überall gesucht, und ich kann nicht scheinen, um herauszufinden, wie ein bestimmtes Formularfeld mit ToscaWidgets zu initialisieren. Die meisten Formularfelder scheinen ganz gut zu reagieren wie auf der Initialisierung, wenn ich ein Formular mit einem einzigen TextField- darin erstellen, wenn ich das Formular in der Vorlage übertragen und passieren in fieldvalue = x, wobei fieldvalue ist der Name der Textfield und x einige Zeichenfolge die TextField- wird mit x gefüllt werden. Mein Problem ist, mit allen mehreren Auswahlfeldern, insbesondere CheckBoxTable. Egal, was ich in es passieren wird nicht die Mehrfachauswahl initialisieren. Hier ist ein Beispiel dafür, was ich rede, es ist ein Benutzer bearbeitet Seite mit einem CheckBoxTable für Gruppen, so dass Sie mehr oder keine Gruppen aus einer Liste von mehreren Gruppen geholt vom databse wählen:

Was ich habe:

Ihr Widget ist:

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

In meinem Controller habe ich:

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

und in meiner Vorlage (Mako) Ich habe:

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

Was habe ich versucht:

In meinem userAttributs Wörterbuch Ich habe versucht:

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

Was erhalte ich:

Das Ergebnis all dieser Code ist ein Benutzer bearbeitet Formular mit Daten mit den Benutzerdaten vorausgefüllt mit Ausnahme der CheckBoxTable. Die CheckBoxTable haben alle Gruppen in der Datenbank anzeigt und leer, was ich brauche für sie haben zu werden, die Anzeige aber die Gruppen der Benutzer abgesehen von überprüft. Ich dachte, den Code in den Modellattributen dies tun würde, denn das ist, was es für jeden anderen Bereich tut, aber es muss eine grundlegende Sache, die ich über CheckBoxTable Instanziierung bin fehle.

Specs:

Ich bin mit Turbogears 2 mit ToscaWidgets 0.9.7 Formen und Mako für Templating.

War es hilfreich?

Lösung

sie über den Wert param gesetzt.

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>'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top