Question

Il existe une vue Django qui charge les objets Member de la base de données avec un certain filtre.

Je dois maintenant changer cette logique pour présenter d'abord un Member spécifique, et laisser le reste suivre dans leur ordre naturel .

Le moyen le plus simple est d'exécuter la requête tout de suite, d'obtenir une liste, de supprimer et d'insérer l'élément au début.Cependant, je suis très curieux s'il existe encore un moyen d'utiliser la nature paresseuse de QuerySet .

En C #, j'écrirais:

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

Comme une boucle passerait par members, elle obtiendrait d'abord specificMember, puis utilisait quelle que soit la logique de chargement paresseux db.Members d'origine utilisée .

Y a-t-il un moyen de faire la même chose avec Django et Python?

Était-ce utile?

La solution

Utilisez itertools.chain.Quelque chose comme:

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

La fonction chain renvoie un itérateur.L'itérateur commence par renvoyer la valeur de la séquence dans le premier paramètre, qui est une liste à un seul élément contenant specific_member.Ensuite, il commence à renvoyer les valeurs de original_members, ce qui, je suppose, est une séquence paresseuse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top