Operaciones con recordsets - Suma de campos en relaciones múltiples

Gustavo Orrillo
- 06/30/2022 - 1 min. de lectura

Algo que aprendí hoy, sobre como sumar los campos de un recordset. Supongamos que tenemos un formulario que contiene lineas. Y cada línea tiene una columna llamada monto. Sería esta estructura:

class Formulario(models.Model):
    _name = 'formulario'
    _description = 'formulario'
    lineas = fields.One2many(comodel_name='formulario.line',inverse_name='formulario_id')
class FormularioLine(models.Model):
    _name = 'formulario.line'
    _description = 'formulario.line'     formulario = fields.Many2one('formulario')     amount = fields.Float('Monto')     cancelado = fields.Boolean('Cancelado')

Y lo que queremos hacer es agregar al modelo formulario un campo llamado saldo que sea la suma de todas las lineas relacionadas. Por lo general se lo hacía de la siguiente manera. Se definía un campo computado y en el método del cómputo, se iteraba sobre cada una de las líneas:

saldo = fields.Float('Saldo',compute="_compute_saldo"

def _compute_saldo(self): for rec in self: res = 0 res = res + rec.amount rec.saldo = res

Unas cuantas líneas, pero no imposible. Ahora, utilizando las funciones de recordsets del ORM de Odoo, lo reducimos a lo siguiente:

saldo = fields.Float('Saldo',compute="_compute_saldo"

def _compute_saldo(self):
    for rec in self:         rec.saldo = sum(self.lineas.mappend('amount'))

Y si queremos filtrar aquellas líneas que no fueron canceladas

saldo = fields.Float('Saldo',compute="_compute_saldo"

def _compute_saldo(self):
    for rec in self:         rec.saldo = sum(self.lineas.filtered(lambda l: not l.cancelado).mappend('amount'))

 Una belleza, no?

    

Acerca de:

Gustavo Orrillo

Passionate about programming, he has implemented Odoo for different types of businesses since 2010. In Moldeo Interactive he is a founding Partner and Programmer; In addition to writing on the Blog about different topics related to the developments he makes.

Cuidado cuando escuchen a alguien decir "Es el workflow propuesto por Odoo!"

Mas de una vez escuche a decir (de diferentes nacionalidades y en diferentes continentes) consultores decir o sugerir "debemos seguir este proceso ...

Seguir leyendo
Los proyectos que tenemos para los meses de marzo y abril

No incluimos Mercadolibre debido a que Fabricio dentro de poco hara anuncios relacionados con Multicuenta y otras yerbas. Si quiero hablar de un par...

Seguir leyendo
Continuamos con "Educando al soberano" - otro blog más de Odoo en Argentina

Bueno, queria hacer este post porque el video me parece sensacional y muy divertido. Y por otra parte para anunciar otro blog, Lucio Bisiach empezó...

Seguir leyendo