在odoo中添加(Sum)两个值

时间:2015-04-24 17:10:20

标签: openerp odoo

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

3 个答案:

答案 0 :(得分:3)

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

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

如果是用qweb写的,上述情况将以不同的方式提交。

更新

有关onchange...

的更多信息

使用onchange的sum代码: 在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

简单示例:https://stackoverflow.com/a/11981080/3374651

答案 1 :(得分:2)

您可以通过onchange方法实现此目的,这是使用新的odi of odoo 的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)中的任何内容。

答案 2 :(得分:0)

你在条件

中写错了变量numb1 numb2

class calc(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}

计算值()