2

web2py カスタム ウィジェットでは、フィールドの説明と値を引数として取得し、represent 関数は値とテーブルの行を取得します。カスタムウィジェット関数に行を渡すことは可能ですか? 同じ行の他の列にアクセスする必要があります。SQLForm.smartgrid 内で行を使用するため、この状況ではあまり制御できません。

4

2 に答える 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 に答える