Question

(S'il vous plaît laissez-moi savoir si cela est tout à fait absurde, qui est probablement une raison pour laquelle je ne l'ai pas trouvé quoi que ce soit à ce sujet.)

Cette histoire a deux modèles Ranking et Artist, Ranking est génériquement liée à Artist (object_id, content_type ... tout le tralala).

J'ai une liste d'objets retournés par Ranking.objects.values_list() commandés par un certain domaine (dans mon cas score). Donc, évidemment, si je veux afficher la liste des artistes qui ont été classés, je les veux dans le même ordre. J'ai essayé différentes méthodes, comme .filter(pk__in=list), .in_bulk(list), etc. Essayé le résultat de contraindre .values_list() dans un tuple aussi.

Ils prennent ma liste:

>>> objects = Ranking.objects.filter(<stuff>).order_by('score')
>>> objects_list = objects.values_list('object_id', flat=True)
>>> objects_list
[8, 1, 2, 15, 14, 3, 13, 31, 16, 5, 4, 7, 32, 9, 37]

Et le retourner comme ceci:

>>> Artist.objects.filter(id__in=objects_list).values_list('id', flat=True)
[7, 32, 3, 8, 4, 2, 31, 9, 37, 13, 16, 1, 5, 15, 14]

(je suis juste donner les ID dans le second cas pour des raisons de santé mentale.)

En ce moment, la seule façon que je peux obtenir ce travail est de créer une liste vide et boucle à travers la requête non values_list().

for item in objects:
    ranked_items.append(item.content_object)

Ce produit juste les requêtes n, alors je me demande s'il y a une meilleure façon. Comme le montrent les balises, j'utilise PostgreSQL.

Était-ce utile?

La solution

Ce n'est pas causée par Django; votre base de données les renvoient dans cet ordre étant donné qu'aucune commande est spécifiée.

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