我见过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
答案 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}}