Допустим, у меня два поля. Такие как num1 и num2. Я хочу показать сумму этих значений в виде дерева. Как применить это в odoo?
Сложить (суммировать) два значения в odoo
Ответы (3)
вы можете добиться этого с помощью onchange
метода, вот демонстрация метода onchange с использованием нового api 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).
Создайте третье поле с именем result
, которое суммирует num1
и num2
, используя поле изменения или функциональное поле со значениями по умолчанию. Вы можете скрыть его в виде формы и отобразить в виде дерева.
Поскольку функциональные поля вычисляются каждый раз, когда загружается представление, не переходите на это, если вы собираетесь использовать его в древовидном представлении, потому что это резко замедлит загрузку представления, поскольку записи и вычисления становятся сложными. Вы можете использовать store=true
, чтобы значение также сохранялось в базе данных.
Если это написано в qweb, вышеуказанный случай будет рассматриваться иначе.
Обновлять:
Для получения дополнительной информации о 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" />
Для функционального поля см .:
Описание: http://bazaar.launchpad.net/~openerp/openobject-server/7.0/view/head:/openerp/osv/fields.py#L843
Простой пример: https://stackoverflow.com/a/11981080/3374651
вы пишете неправильные переменные numb1 numb2 в условии
класс 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}
calc ()