3

我已经看到了这个问题,并用它在 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)"/>  

其中resultlowerupper是浮点数,而warning是没有默认值的布尔值。在我的表单内的树中,我为lowerupper预定义了值,而结果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

4

1 回答 1

2

浮点字段的默认值始终为 0.0。仅当您更改值时才会调用 on_change。

如果您想在值为“0”时进行任何操作,那么您可以使用 char 字段而不是 float。调用 on_change 时,您必须将值从字符串转换为浮点数,然后您才能进一步进行操作。

您可以将类型转换代码放入 try except 并在执行 except 块时引发异常。

例如:尝试:

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}}
于 2012-12-11T10:57:13.073 回答