[pyar] Ayuda para api con django-rest-framework
Gustavo Marino
gamarino en numaes.com
Mie Ene 3 20:27:47 ART 2018
Hola!
No soy muy conocedor de Django, pero te puedo contar lo que pasa en otra
plataforma de ORM - Odoo.
Los filtros sobre campos calculados pueden ser implementados:
- Analizando el criterio de búsqueda, sacando todas las expresiones que
contengan los campos calculados (con lo que obtendrás un superset de los
resultados) e implementar antes de devolver el resultado el filtrado solo
para las expresiones que tengan campos calculados.
Super complejo para hacerlo bien, por la conversión de la expresión de
búsqueda, la correcta implementación del segundo nivel de búsqueda (que
puede implicar traer de la base de datos muchos registros más que los
necesarios)
- No permitir los campos calculados en las expresiones de búsqueda, y
dejarle al usuario del sistema que encuentra la manera de arreglarse sin
ellos
Horrible, pero algunos lo hacen
- Hacer un cache de los campos calculados.
Esto es, efectivamente convertir los campos calculados en campos de la
base de datos, y por lo tanto dejar que el motor de base datos resuelva la
búsqueda y el filtrado eficiente sin leer datos innecesarios (cosa que sabe
hacer bien).
Todo muy lindo, pero implica desarrollar una estrategia inteligente para
actualizar los campos calculados cuando lo campos de los cuales dependen
hayan variado su valor. Esta dependencia puede ser muy compleja (por
ejemplo en una linea de pedido, puede ser que cambie el % de un impuesto
asignado a un producto, y con ello el sutotal de impuestos del pedido). Es
dificil de implementar bien, trivial si los campos de los que dependen son
del mismo registro, pero complejo si vas a tener en cuenta las dependencias
indirectas a traves de las relaciones del objeto. Es lo que hace Odoo
De cualquier modo es dificil.
Gustavo Adrian Marino
Mobile: +54 911 5498 2515
Email: gamarino en numaes.com
Skype: gustavo.adrian.marino
[image: Descripción: Numa Logo V 1-0]
El 3 de enero de 2018, 18:28, Federico Gonzalez <
federicogonzalez761 en gmail.com> escribió:
> Buenas,
>
> Tengo un problema con la api que estoy armando y quería consultar para ver
> si alguien tenia una solución.
> Tengo un modelo que quiero hacer una api rest en la cual poder filtrar,
> ordenar, paginar y buscar.
> Actualmente hace todo eso pero me encontré con un problema al querer
> ordenar y/o filtrar por datos del modelo que no son fields sino que
> property's (no estan en la db).
> Para el caso de ordenar logre que algo me funcione (aunque no me gusta
> mucho) pero para el caso de filtrar todavía no logre hacerlo.
> Para que vean el código:
> 1- El Serializer del modelo: serializer
> <https://github.com/eventoL/eventoL/blob/develop/eventol/eventol/api.py#L14>
> 2- El modelo: model
>
>
> <https://github.com/eventoL/eventoL/blob/develop/eventol/manager/models.py#L17>
> En ese código pueden ver que por ejemplo attendees_count es una property
> que se calcula en el serializer/viewset y la api no solo lo muestra sino
> que puede ordenar por ese "campo" pero no puede filtrar por ese campo.
> En resumen, lo que me gustaria es primero saber que opinan de eso, segundo
> ver como puedo hacer lo mismo con esta property: last_date
> <https://github.com/eventoL/eventoL/blob/develop/eventol/manager/models.py#L41>
> y por ultimo saber si se puede filtrar por alguna property calculada.
>
> Saludos
> Fede
>
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180103/c95ac167/attachment-0001.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: image001.jpg
Type: image/jpeg
Size: 3995 bytes
Desc: no disponible
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180103/c95ac167/attachment-0001.jpg>
Más información sobre la lista de distribución pyar