私は選択ウィジェットを持つCRUDフォームを持っています。ウィジェットのオプションは動的です。値は他のテーブルから来ているので、タグは使用できません。私はこの方法を使用してコントローラの値を変更しようとしています:私は、メソッドを呼び出すと、フォームを点検web2py:crud形式のウィジェットを変更します。
def change_widget(form, id, widget):
"Tries to find a widget in the given form with the given id and swaps it with the given widget"
for i in range(len(form[0].components)):
if hasattr(form[0].components[i].components[1].components[0], 'attributes'):
if '_id' in form[0].components[i].components[1].components[0].attributes:
if form[0].components[i].components[1].components[0].attributes['_id'] == id:
form[0].components[i].components[1].components[0] = widget
return True
return False
した後、私は、フォームが正常に変更されたことがわかります。ビュー側では、私は、カスタムビューを使用し、そのようにフォームを表示しようとしている:
{{=form.custom.begin}} {{=form.custom.widget.customized_field}}
{{=form.custom.submit}} {{=form.custom.end}}
しかし、それはまだ私のオリジナル無修正ウィジェットを示しています。私は間違って何をしていますか?これを行うより良い方法はありますか?