Web2py:从自定义小部件访问行

时间:2014-11-24 11:56:46

标签: web2py custom-widgets

在web2py中,自定义小部件将字段描述和值作为参数获取,而表示函数获取值和表行。 是否可以将行传递给自定义窗口小部件功能?我需要访问同一行的其他列。 我在SQLForm.smartgrid中使用了行,所以在这种情况下我没有太多的控制权。

2 个答案:

答案 0 :(得分:1)

假设这是处理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))

以上代码添加了"记录"属性到字段对象(将传递给窗口小部件,然后您可以从字段对象中提取记录)。网格/智能网格"编辑"链接包括记录ID作为最后一个URL arg,可通过上面的request.args(-1)访问。

在自定义窗口小部件代码中:

def mywidget(field, value):
    record = field.record  # here you have the whole record
    ...

答案 1 :(得分: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

或者,如果这些参数更全局,您可以在模型中声明小部件。