2007-08-21

[メモ]TurboGearsのwidgets-based formのpre-fill

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]というふうに番号で指定するのが気持ち悪いけれど。