Filtros en Context

Hola! A ver si alguien me puede ayudar.
Quiero poner unos filtros (context) a un listado, y eso lo pude hacer pero no sé como hacer para que se filtre cuando cambio los datos en los filtros.
Les cuento que he hecho.

Tengo una clase Concepto con los datos del concepto (Concept), una clase Liquidación (Payroll) que tiene lineas (la clase LiquidacionLinea (PayrollLine)) y estas lineas están asociadas a los Conceptos y otros datos.

class Concept(ModelSQL, ModelView):
    code = fields.Char('Code', required=True)
    description = fields.Char('Description', required=True)
    aliquot = fields.Numeric('Aliquot', digits=(16, 1), required=True)

class Payroll(ModelSQL, ModelView):
    ...
    lines = fields.One2Many('rts.payroll.line', 'payroll', 'Lines')

class PayrollLine(ModelSQL, ModelView):
    ...
    payroll = fields.Many2One('rts.payroll', 'Payroll', required=True, ondelete='CASCADE', select=True)
    concept = fields.Many2One('rts.concept', 'Concept', required=True, readonly=True)
    amount = fields.Numeric('Amount', digits=(16, 2))
    aliquot_amount = fields.Numeric('Aliquot amount', digits=(16, 2))

Lo que quiero hacer es crear un nuevo listado de los Conceptos con sumatorias de los montos que están en las lineas de las Liquidaciones (PayrollLine).
Cree una clase con table_query()

class ConceptStatistics(ModelSql, ModelView):
    ...
    concept = fields.Many2One('rts.concept', 'Concept')
    total_amount = fields.Numeric('Amount', digits=(16, 2))
    total_aliquot_amount = fields.Numeric('Aliquot amount', digits=(16, 2))

    @classmethod
    def table_query(cls):
        concept = Pool().get('rts.concept').__table__()
        return concept.select(
            concept.id.as_('id'),
            concept.create_uid.as_('create_uid'),
            concept.create_date.as_('create_date'),
            concept.write_uid.as_('write_uid'),
            concept.write_date.as_('write_date'),
            concept.id.as_('concept'),
            Literal(None).as_('total_amount'),
            Literal(None).as_('total_aliquot_amount'),
            )

y a ésta clase le agrego el contexto (Context)

class ConceptStatisticsContext(ModelView):
    concept = fields.Many2One('rts.concept', 'Concept')
    year = fields.Integer('Year')
    period = fields.Integer('Period')

Esto me funciona, pero tengo algunas consultas.

  • No sé como filtrar si cambio, por ejemplo, el filtro concept que me muestre ese único concepto.
  • Al cambiar el año o periodo del Context, que me haga la sumatoria de los montos de ese año, guardarlo en la clase ConceptStatistics.

Muchas gracias!

You have to adapt the query returned by table_query so it is using the data from Transaction().context.

Perfecto! Anduvo :clap::clap::clap:
Muchas gracias!!