web2py カスタム ウィジェットでは、フィールドの説明と値を引数として取得し、represent 関数は値とテーブルの行を取得します。カスタムウィジェット関数に行を渡すことは可能ですか? 同じ行の他の列にアクセスする必要があります。SQLForm.smartgrid 内で行を使用するため、この状況ではあまり制御できません。
2 に答える
2
SQLFORM.smartgrid
これが更新フォームを処理するためのものであると仮定すると、次のようなトリックを試すことができます。
def show_grid():
if 'edit' in request.args:
db.mytable.myfield.record = db.mytable(request.args(-1))
return dict(grid=SQLFORM.smartgrid(db.mytable))
上記のコードは、「レコード」属性をフィールド オブジェクトに追加します (これはウィジェットに渡され、そこでフィールド オブジェクトからレコードを抽出できます)。Grid/smartgrid の「編集」リンクには、上記でアクセスされる最後の URL 引数としてレコード ID が含まれますrequest.args(-1)
。
カスタム ウィジェット コードで:
def mywidget(field, value):
record = field.record # here you have the whole record
...
于 2014-11-24T16:18:44.957 に答える
0
ウィジェット メソッド自体は、フィールドと値の引数のみを受け取りますが、ウィジェット オブジェクトを定義するときに、さらに引数を追加できます。検討
ウィジェットコード内
Class CustomWidget():
def __init__(self, custom_arg_1, custom_arg_2): # Name them as needed
self.custom_arg_1 = custom_arg_1
self.custom_arg_2 = custom_arg_2
def widget(field, value):
if self.custom_arg_1 == self.custom_arg_2:
return "Something helpful"
else:
return "Something else"
次に、コントローラーで
from somewhere import CustomWidget
def this_uses_custom_widget():
widget_with_args = CustomWidget(3,4) # Pass whatever you need there
db.table.field.widget = widget_with_args.widget
または、これらの引数がよりグローバルな場合は、モデルでウィジェットを宣言できます。
于 2015-05-08T21:25:16.550 に答える