在odoo中添加(求和)两个值

Add(Sum) two values in odoo

假设我有两个字段。比如 num1 和 num2。我想在树视图中显示这些值的总和。如何在 odoo 中应用它?

创建一个名为 result 的第三个字段,它使用具有默认值的 onchange 或功能字段对 num1num2 求和。您可以在表单视图中隐藏它并在树视图中显示它。

由于每次加载视图时都会计算功能字段,如果您打算在树视图中使用它,请不要这样做,因为随着记录和计算变得复杂,它会大大减慢视图加载速度。您也可以使用 store=true 强制将值存储在数据库中。

如果是用qweb写的,上面的case会有不同的处理方式

更新:

有关onchange...

的更多信息

使用 onchange 求和的代码: 在 python 文件中:

class sample_test(osv.osv):
    _name = "sample.test"

    _columns = {
                'num1': fields.integer('Num1'),
                'num2': fields.integer('Num2'),
                'result': fields.integer('Result'),
                }

    def onchange_result(self, cr, uid, ids, num1, num2, context=None):
        res = {}
        if num1 and numb2:
            res['result'] = numb1 + numb2
        return {'value': res}

在 xml 文件中:

<field name="num1" on_change="onchange_result(num1, num2)" />
<field name="num2" on_change="onchange_result(num1, num2)" />
<field name="result" />

功能字段参考:

语法:https://doc.odoo.com/v6.0/developer/2_5_Objects_Fields_Methods/field_type.html#functional-fields

说明:http://bazaar.launchpad.net/~openerp/openobject-server/7.0/view/head:/openerp/osv/fields.py#L843

简单示例:

您可以通过 onchange 方法实现此目的,这里是使用 odoo.

new api 的 onchange 方法的演示
class DemoModel(models.Model):

    _name = 'demo.model'

    field_x = fields.Integer('Column X')
    field_y = fields.Integer('Column Y')
    field_sum = fields.Integer('Column Sum')

    @api.onchange('field_x', 'field_y')
    def onchange_field(self):
        if self.field_x or self.field_y:
            self.field_sum = self.field_x + self.field_y

您不需要更改视图部分中的任何内容(xml)。

你在条件中写入了错误的变量 numb1 numb2

class 计算(osv.osv): _name = "calc"

_columns = {
            'num1': fields.integer('Num1'),
            'num2': fields.integer('Num2'),
            'result': fields.integer('Result'),
            }

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

计算()