TurboGearsの公式FAQページで"Answers wanted for the following questions"という欄に未だ回答なしとして載っているFAQの一つに
「widgets-based formにあらかじめ値を埋め込むにはどうすればよい?」
というのがあがっている。
多分こんな感じでどうだろう。
class SomethingFields(widgets.WidgetsList):
code = widgets.HiddenField()
query = widgets.TextField(label=u"検索")
class SomethingSchema(validators.Schema):
code = validators.String(not_empty=True, max=9)
query = validators.String(not_empty=True, max=5)
class SomethingForm(widgets.TableForm):
fields = SomethingFields()
something_form_obj = SomethingForm(fields=SomethingFields(), validator=SomethingSchema())
class SomeController(controllers.Controller):
@expose(template='kid:somepackage.SomeController.templates.detail')
def detail(self, code, **kw):
#........
something_form_obj.fields[0].attrs["value"] = code
return dict(form=something_form_obj)
この最後から二行目のように、
フォームオブジェクト.fields[0].attrs["value"] = "あらかじめ入れたい値"
とすればいいようだ。fields[0]というふうに番号で指定するのが気持ち悪いけれど。