117 votes

Django obtient un QuerySet à partir d’un tableau d’id's dans un ordre spécifique

en voici un rapide pour vous:

J’ai une liste d’id que je veux utiliser pour retourner un QuerySet (ou un tableau si nécessaire), mais je veux maintenir cet ordre.

merci

298voto

Soitje Points 2165

Depuis Django 1.8, vous pouvez faire :

76voto

Reiner Gerecke Points 5332

Je ne pense pas que vous puissiez appliquer cet ordre particulier au niveau de la base de données, vous devez donc le faire en python à la place.

Cela crée un dictionnaire des objets avec leur id comme clé, afin qu’ils puissent être récupérés facilement lors de la création de la liste triée.

30voto

Rrrrrrrrrk Points 593

Si vous souhaitez le faire en utilisant in_bulk, vous devez en fait fusionner les deux réponses ci-dessus:

Sinon, le résultat sera un dictionnaire plutôt qu’une liste spécifiquement ordonnée.

30voto

buffer Points 2261

Voici un moyen de le faire au niveau de la base de données. Copier coller à partir de: blog.mathieu-leplatre.info :

MySQL:

Idem avec Django :

PostgreSQL:

Idem avec Django :

13voto

Andrew G Points 241
id_list = [1, 5, 7]
objects = Foo.objects.filter(id__in=id_list)
sorted(objects, key=lambda i: id_list.index(i.pk))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X