在odoo中添加(求和)两个值
Add(Sum) two values in odoo
假设我有两个字段。比如 num1 和 num2。我想在树视图中显示这些值的总和。如何在 odoo 中应用它?
创建一个名为 result
的第三个字段,它使用具有默认值的 onchange 或功能字段对 num1
和 num2
求和。您可以在表单视图中隐藏它并在树视图中显示它。
由于每次加载视图时都会计算功能字段,如果您打算在树视图中使用它,请不要这样做,因为随着记录和计算变得复杂,它会大大减慢视图加载速度。您也可以使用 store=true
强制将值存储在数据库中。
如果是用qweb写的,上面的case会有不同的处理方式
更新:
的更多信息
使用 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}
计算()
假设我有两个字段。比如 num1 和 num2。我想在树视图中显示这些值的总和。如何在 odoo 中应用它?
创建一个名为 result
的第三个字段,它使用具有默认值的 onchange 或功能字段对 num1
和 num2
求和。您可以在表单视图中隐藏它并在树视图中显示它。
由于每次加载视图时都会计算功能字段,如果您打算在树视图中使用它,请不要这样做,因为随着记录和计算变得复杂,它会大大减慢视图加载速度。您也可以使用 store=true
强制将值存储在数据库中。
如果是用qweb写的,上面的case会有不同的处理方式
更新:
的更多信息使用 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.
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}
计算()