[pyar] [django] Consulta en tabla grande con annotate y Sum

Ariel Rossanigo arielrossanigo en gmail.com
Jue Dic 18 07:38:47 ART 2014


El 17 de diciembre de 2014, 2:42 p. m., Matias Varela<matu.varela en gmail.com>
escribió:
[...]

> ¿Se puede generar un QuerySet manualmente? por lo que leí no. Porque sería
> una solución.
>
>
Una solución rápida y fea que se me ocurre es crear una vista en postgres y
armar un modelo de esa vista.

Por ejemplo:
* Ejecutas esto en postgres

CREATE VIEW vw_reporte As
SELECT "pp_cliente"."id", "pp_cliente"."nombre", mov."monto" AS "saldo"
FROM "pp_cliente"
LEFT OUTER JOIN (
select cliente_id, sum(monto) as monto
from "pp_movimientocliente"
group by cliente_id) mov ON ( "pp_cliente"."id" = mov."cliente_id" )

* models.py

class MiReporte(models.Model):
    id = models.IntegerField(primary_key=True)
    nombre = models.CharField()
    saldo = models.FloatField()

    class Meta:
        managed = False
        db_table = 'vw_reporte'


Después haces la query directamente y obtenes un Queryset

In [1]: from pp.models import MiReporte

In [2]: q = MiReporte.objects.all()

In [3]: print type(q), str(q.query)
<class 'django.db.models.query.QuerySet'> SELECT "vw_reporte"."id",
"vw_reporte"."nombre", "vw_reporte"."saldo" FROM "vw_reporte"
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20141218/d2273868/attachment-0001.html>


More information about the pyar mailing list