OpenERP中的onchange函数,其值等于默认值

时间:2012-12-11 10:42:31

标签: python onchange openerp

我见过this问题并用它在openerp中实现了类似的目标。因此我的职能是:

def onchange_warning(self, cr, uid, ids, result, lower, upper, context=None):
    res={}
    flag = False
    if result < lower or result > upper:
        flag = True
    res = {'warning': flag}
    return {'value': res}

我认为:

<field name="result" on_change="onchange_warning(result, lower, upper)"/>  

其中结果较低较高为浮点数,而警告为布尔值且没有默认值。在我的表单内的树中,我有 lower upper 的预定义值,而结果 null(0.00)并设置为填充。

该功能运作良好,并按照预期行事。然而,我遇到了实际上等于0.0 的结果的问题,应该设置标志,而 onchange 函数(D'Oh!)无法执行,因为该字段值在技术上没有从其默认值0.00更改。该怎么办?

PS:对于可怕的头衔感到抱歉,随时可以改进它:)

编辑:

如果有人需要查看该功能的变化:

def onchange_warning(self, cr, uid, ids, result, lower, upper, context=None):
    res={}
    flag = False
    if float(result) < lower or float(result) > upper:
        flag = True
    res = {'warning': flag}
    return {'value': res}

结果现在是 fields.char

1 个答案:

答案 0 :(得分:2)

Float字段的默认值始终为0.0。只有在更改值时才会调用on_change。

如果要在值为“0”时执行任何操作,则可以使用char字段而不是float。调用on_change时,必须将值从string转换为float,然后才能进一步操作。

您可以将您的类型转换代码放在try除外,并在执行除block之外引发异常。

例如:尝试:

def on_change_float(self, cr, uid, ids, test1, context=None):
    val = float(test1)
    except Exception:
        raise osv.except_osv('Input Error ! ', 'Please enter numbers.')
    return {'value': {'test1': val}}