在其他函数odoo中调用函数

Call function inside other function odoo

我想在函数 1 中调用函数 2。

函数 2 需要参数(num2 和 num3),在源代码中调用后我没有收到任何错误,但也没有任何反应。

def function_1(self, cr, uid, ids, num1, num2, num3, context=None):
        res = {}
        if num1:
            res['sum'] = num1 + num2
            return {'value': res}
        self.function_2(cr, uid, ids, num2, num3, context)


    def function_2(self, cr, uid, ids, num2,num3, context=None):
        res = {}
        if num2:
            res['sum2'] = num2 + num3
            return {'value': res}

这里有什么问题或任何其他解决方案?

您不需要 function_2 中的 self 并且您还需要 return 关键字,因为在 function_2 计算之后 returns 它的值对于 function_1 的调用者,function_1 也必须 return 结果给它的调用者。如果你不添加 return 语句 function_1 最终会 returning None 给它的调用者。

def function_1(self, cr, uid, ids, num1, num2, num3, context=None):
    # i'll place the function definition at the top (personal preference)
    def function_2(cr, uid, ids, num2,num3, context=None):
        res = {}
        if num2:
            res['sum2'] = num2 + num3
            return {'value': res}

    res = {}
    if num1:
        res['sum'] = num1 + num2
        return {'value': res}

    return function_2(cr, uid, ids, num2, num3, context=context)

我个人认为不需要嵌套函数。我会这样写的。

def function_1(self, cr, uid, ids, num1, num2, num3, context=None):
    res = {}
    if num1:
        res['sum'] = num1 + num2
        return {'value': res}

    elif num2:
        res['sum2'] = num2 + num3
        return {'value': res}

    else:
        pass # return some default value here