Pregunta

Hay una vista de django que carga Member Objetos de la base de datos con cierto filtro.

Ahora necesito cambiar esta lógica a presentar un específico Member Primero, y deje que el resto siga en su orden natural.

La forma más directa es ejecutar la consulta de inmediato, obtener una lista, eliminar e insertar el elemento al principio. Sin embargo, tengo más curiosidad Si todavía hay alguna forma de utilizar QuerySetLa naturaleza perezosa.

En C#, escribiría:

IEnumerable<Member> members = db.Members; // db.Members is lazy
members = Enumerable.Union( // construct a lazy sequence that traverses its arguments
    new [] { specificMember },
    members.Where(m => m != specificMember)
);

Como pasaría un bucle members, primero obtendría specificMember y luego usar Cualquier lógica de carga perezosa original db.Members usó.

¿Hay alguna forma de hacer lo mismo en Django y Python?

¿Fue útil?

Solución

Usar itertools.chain. Algo como:

import itertools
original_members = .... # get an iterator of the data
members = itertools.chain([specific_member], original_members)

La función de cadena devuelve un iterador. El iterador comienza devolviendo el valor de la secuencia en el primer parámetro, que es una lista de elementos únicos que contiene específico_member. Luego comienza a devolver los valores de original_members, que supongo que es una secuencia perezosa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top