【问题标题】:onchange function in OpenERP for values equal to default valuesOpenERP中的onchange函数用于等于默认值的值
【发布时间】:2012-12-11 10:42:30
【问题描述】:

我已经看到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)"/>  

其中 resultlowerupper 是浮点数,warning 是没有默认值的布尔值。在我的表单内的树中,我为 lowerupper 预定义了值,而 resultnull (0.00) em> 并设置为填充。

该功能运行良好,并按预期工作。但是,我遇到了 实际上等于 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}

result 现在是 fields.char

【问题讨论】:

    标签: python onchange openerp


    【解决方案1】:

    浮点字段的默认值始终为 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}}
    

    【讨论】:

    • 我希望我不需要使用 char 字段并转换它。那么没有别的办法了吗?
    • 我不知道我为什么要打扰,你说的是准确和合理的,它适用于 char 和 cast。谢谢。
    • 是的,只有当 char 值具有数字值时,您才能转换它。所以你必须假设用户不会在该字段中输入字符。
    • 是的,那会令人不快,但我宁愿这样,因为还有另一个相邻字段“result_text”,最好不要让用户将它们与 result=value 混淆
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多