Domanda

C'è una vista django che si carica Member Oggetti dal database con un determinato filtro.

Ora ho bisogno di cambiare questa logica in Presenta uno specifico Member Innanzitutto, e lascia che il resto segua nel loro ordine naturale.

Il modo più semplice è eseguire subito la query, ottenere un elenco, rimuovere e inserire l'articolo all'inizio. Comunque sono molto curioso Se c'è ancora un modo per utilizzare QuerySetNatura pigra.

In C#, scriverei:

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)
);

Come passerebbe un ciclo members, otterrebbe prima specificMember e poi usa Qualunque sia la logica di caricamento pigra originale db.Members Usato.

C'è un modo per fare lo stesso in Django e Python?

È stato utile?

Soluzione

Uso itertools.chain. Qualcosa di simile a:

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

La funzione a catena restituisce un iteratore. L'iteratore inizia restituendo il valore dalla sequenza nel primo parametro, che è un elenco a singolo elemento contenente specifico. Quindi inizia a restituire i valori da original_members, che presumo sia una sequenza pigra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top