当请求在表单视图中显示记录时,有什么方法可以调用函数吗?

Is there any way to call a function when a record is requested to be shown in a form view?

我想更新在表单视图中显示的每条记录。无论如何要定义某种回调来在显示记录之前更新记录?

我能想到的一种方法是添加一个虚拟字段以形成具有 on_change 属性的视图。但是感觉有点hacky。

您可以使用函数字段。加载表单时以及前后创建新记录时调用函数。

当您创建新记录时,此函数字段将采用 William 的值,保存后值将更改并变为 odedra

这里是 char return 函数类型的例子:

def _default_get(self, cr, uid, context=None):
    print " This function called before new record create " 
    res = 'William'
    return res      

def _set_value(self, cr, uid, ids, name, args, context=None):
    print " This function called at time of saving record and form view load "
    res = {}
    for i in self.browse(cr, uid, ids, context=context):
        res[i.id] = 'odedra'
    return res

_columns = {
    'value': fields.function(_set_value, type='char', string='Value'),
}

_defaults = {
    'value': _default_get, 
}

注意:

根据您的要求,您可以更改函数字段 return 类型。

使用功能字段似乎很奇怪,但使读取不是幂等的也很不寻常。

我会在表单的 window 操作中设置一个上下文,这样您就可以对其进行测试并限制其影响,然后覆盖新记录的 default_get 方法和读取方法用于您模型上的现有记录。