# Filtros en Context

**URL:** https://discuss.tryton.org/t/filtros-en-context/3477
**Category:** Developer
**Created:** [November 20, 2020, 3:16pm UTC](https://discuss.tryton.org/t/filtros-en-context/3477 "2020-11-20T15:16:28Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![galk](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/galk/32/1168_2.png) [@galk](https://discuss.tryton.org/u/galk)
#### Post date: [November 20, 2020, 3:16pm UTC](https://discuss.tryton.org/t/filtros-en-context/3477/1 "2020-11-20T15:16:28Z")

</div>

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.

```auto
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()

```auto
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)

```auto
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!

---

<div class="post-metadata">

### Author: ![ced](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/ced/32/1237_2.png) [@ced](https://discuss.tryton.org/u/ced)
#### Post date: [November 23, 2020, 9:02am UTC](https://discuss.tryton.org/t/filtros-en-context/3477/2 "2020-11-23T09:02:32Z")

</div>

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

---

<div class="post-metadata">

### Author: ![galk](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/galk/32/1168_2.png) [@galk](https://discuss.tryton.org/u/galk)
#### Post date: [November 24, 2020, 12:11pm UTC](https://discuss.tryton.org/t/filtros-en-context/3477/3 "2020-11-24T12:11:33Z")

</div>

Perfecto! Anduvo 👏👏👏  
Muchas gracias!!
