select_related queryset query example cual python django list sorting django-queryset

python - example - django-convierte una lista a un queryset



django queryset to list (2)

No tiene sentido convertir una lista de datos a una consulta. Un objeto de consulta nunca contiene datos; solo representa una consulta a la base de datos. Tendría que buscar todo de nuevo si hiciera su lista para una consulta, y eso sería redundante y muy mal para el rendimiento.

Lo que puedes hacer:

  • Describe cómo se calcula el campo de reputation ; probablemente sea posible ordenar los datos en la base de datos de alguna manera.
  • Modifique la vista para no requerir un objeto de consulta. Si necesita hacer un filtrado adicional, esto debe hacerse antes de cualquier pedido, ya que el pedido tomará menos tiempo con menos entradas (y se obtendrán menos datos de la base de datos). Así que podría enviar el objeto de consulta filtrado al género funciona justo antes de enviarlo a la plantilla (que no debería importar si se trata de una consulta o una lista).

Esta pregunta ya tiene una respuesta aquí:

Tengo un puñado de registros que me gustaría ordenar en función de un valor calculado. Tengo la respuesta aquí ... así:

sorted(Profile.objects.all(), key=lambda p: p.reputation)

en una clase de perfil como esta:

class Profile(models.Model): ... @property def reputation(self): ...

Lamentablemente, la vista genérica está esperando un objeto queryset y arroja un error si le doy una lista.

¿Hay alguna forma de hacer esto que devuelva un conjunto de consulta?

o...

¿Puedo convertir una lista en un queryset de alguna manera? No pude encontrar nada de eso en los documentos de django.

Espero no desnormalizar los datos, pero supongo que lo haré si es necesario.

Actualización / Respuesta:

parece que la única forma de recuperar un queryset es si puede obtener toda su lógica en las consultas sql.

Cuando eso no es posible, (creo) necesitas desnormalizar los datos


Ok ... esta publicación ahora es vieja, pero lo que podrías hacer es obtener todos los ids de los objetos en tu lista, y luego realizar un model.objects.filter(pk__in=list_of_ids)