# -*- coding: utf-8 -*- from odoo import models, fields from odoo.tools.safe_eval import safe_eval class HypergraphValue(models.Model): #значения. Решил объединить временные ряды _name = 'hg.value' name = fields.Char('Имя') value_float_actual = fields.Float(string='Факт') value_float_plan = fields.Float(string='План') date_due = fields.Date(string='Дата', required=True) index_id = fields.Many2one(comodel_name='hg.index', string='Индекс') type = fields.Selection( [ ('alone', 'Простой'), ('formula', 'Формула') ], string='Тип', default='alone', required=True ) formula = fields.Char(string='Формула') def calc(self): #метод, который вычисляет значение: или по формуле или по связанным for rec in self: if rec.type == 'formula': localdict = { 'node_value': rec, 'node_index': rec.index_id, 'datatime': fields.Date.today(), } result = safe_eval(rec.formula or '0', localdict, mode="eval") rec.value_float_actual = result return True