Limitar queryset a últimos cinco, a partir de un campo foreign key

327 views
Skip to first unread message

Edgar De La Cruz

unread,
Aug 18, 2015, 3:42:28 PM8/18/15
to Django-es
estoy realizando un filtrado a la tabla seguimiento, donde por motivos de rendimiento de la aplicacion trato de mandar los ultimos 10 registros de la tabla, hasta ahora tengo esto:
queryset = seguimiento.objects.filter(fecha_registro__in=inner_qs,cat_estatus__clave__in=('C','T', 'R','EA','A','CDO','ADA','D','RDA',)).order_by('-solicitud__fecha_creacion','-pk')[:10]

hasta aqui tengo últimos movimientos 10 de la tabla seguimiento, y lo que trato de hacer es que sean los ultimos 10 pero de la tabla solicitud.

class solicitud(models.Model):
asunto = models.CharField(max_length=100)
descripcion = models.TextField()
fecha_creacion = models.DateField(auto_now_add=True, )
tecnico = models.ForeignKey(persona,null=True,blank=True,related_name='tecnico')



class seguimiento(models.Model):
solicitud = models.ForeignKey(solicitud)
fecha_registro = models.DateTimeField(auto_now_add=True)

dejo las dos tablas, espero su ayuda.

RompePC

unread,
Aug 19, 2015, 1:15:59 PM8/19/15
to Django-es
¿Los últimos 10 de solicitud de un seguimiento específico?
De cada objeto seguimiento coge los 10 primeros objetos solicitud asociados (orden descendente).

Axel Díaz

unread,
Aug 20, 2015, 7:12:53 AM8/20/15
to djan...@googlegroups.com
Yo le añadiría un filtro a las últimas 10 solicitudes.. Algo como:

solicitudes = Solicitud.objects.all()[:10] y luego al otro filtro algo como

queryset = seguimiento.objects.filter(solicitud__in=solicitudes, fecha_registro__in=inner_qs,cat_estatus__clave__in=('C','T', 'R','EA','A','CDO','ADA','D','RDA',)).order_by('-solicitud__fecha_creacion','-pk')[:10]

Y ahí tendrías los 10 seguimientos de las últimas 10 solicitudes...

RompePC <durir...@gmail.com>escribió:
--
--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.
---
Has recibido este mensaje porque estás suscrito al grupo "Django-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a django-es+...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Edgar De La Cruz

unread,
Sep 7, 2015, 6:10:37 PM9/7/15
to Django-es
No lo habia visto asi Axel, es una buena opcion, gracias, ahora tengo una duda en cuestiones de rendimiento que es mas favorable: realizar una consulta sobre otra consulta como lo que me propones o tratar de realizar una sola consulta con todos los parametros que logren hacerla mas especifica,digo con puros and y or solo es duda.Lo que me propones me ayudo.

Axel Diaz

unread,
Sep 7, 2015, 6:16:38 PM9/7/15
to djan...@googlegroups.com
Es prácticamente igual,

Si tienes una consulta por ejemplo:

variable = Modelo.objects.filter(campo1=valor1) Y luego haces un variable2 = variable.filter(campo2=valor2) es prácticamente igual, yo lo haría así si voy a utilizar variable para algo distinto a variable2, y me permite no hacerle otra consulta nueva al servidor con el filtro de campo1=valor1.

Ahora, si no voy a utilizar más "variable", le pondría directamente todos los and y or para tener un filter(campo1=valor1, campo2=valor2).


El 07/09/15 a las 17:40, Edgar De La Cruz escribió:
-- 
Ing. Axel Díaz
Axel Díaz
Turmero - Edo. Aragua. Venezuela
http://github.com/Axelio
Linux User #531976
Usuario Canaima #1057

Imprima este e-mail sólo sí es necesario. Protejamos el medio ambiente.
diaz_axelio.vcf

Edgar De La Cruz

unread,
Sep 7, 2015, 6:36:25 PM9/7/15
to Django-es
ah ya veo, si esque alguien me comento que al asignar un query a una variable y luego utilizarla volvia a ir a la base de datos, que no conservaba el valor del filter,get o all que volvia realizar otra vez el query , ahora como tu dices en algunos casos cuando tengo la posibilidad de realizarlo todo en un solo query con los ordenadores lo hago de manera que solo sea una peticion. Saludos!
Reply all
Reply to author
Forward
0 new messages