Foros del Web » Programando para Internet » Python »

obtener objectos random de un queryset

Estas en el tema de obtener objectos random de un queryset en el foro de Python en Foros del Web. Hola todos. ¿Cuál es la mejor manera de obtener objetos aleatoreamente de un queryset?. en mi caso este es mi queryset: Código: pp = Posts.objects.order_by('-votos_positivos')[:7] ...
  #1 (permalink)  
Antiguo 07/02/2014, 12:03
Avatar de stormearth  
Fecha de Ingreso: octubre-2013
Ubicación: Quito
Mensajes: 68
Antigüedad: 10 años, 6 meses
Puntos: 2
obtener objectos random de un queryset

Hola todos. ¿Cuál es la mejor manera de obtener objetos aleatoreamente de un queryset?.

en mi caso este es mi queryset:
Código:
pp = Posts.objects.order_by('-votos_positivos')[:7]
posts_populares = [ ]
Y lo que quiero es llenar la lista posts_populares aleatoreamente con objetos del queryset.
(o encontrar una manera de pasar una lista aleatoria de los Posts del queryset al template)
ya traté random.shuffle[pp] .. pero un queryset no acepta random.shuffle,
también traté lo siguiente:
Código:
for i in range(3):
		n = pp.pop(random.randint(0,len(pp)))
		posts_populares.append(n)
Esperando llenar la lista posts_populares con 3 objectos del queryset. Pero tampo acepta pop el queryset.
Traté otras cosas.. pero no lo he logrado. Hay que tomar en cuenta que la lista no puede tener objetos repetidos del queryset, por eso quería usar pop().

Se me ocurre que puedo hacer 3 querysets diferentes y que cada uno apunte a un objeto de la base de datos, y luego poner los 3 objetos en una lista, pero ¿Esto no significaría entrar a la base de datos 3 veces, cuando lo ideal sería entrar solo 1 vez?
  #2 (permalink)  
Antiguo 07/02/2014, 16:37
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: obtener objectos random de un queryset

Pasas tu queryset a una lista y ahora si obtienes 3 objetos aleatorios.
Código Python:
Ver original
  1. from random import sample
  2. ...
  3. pp = list(Posts.objects.order_by('-votos_positivos')[:7])
  4. posts_populares = sample(pp, 3)

Etiquetas: django, random
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:15.