Domanda

(Si prega di farmi sapere se questo è completamente assurdo, che è probabilmente una ragione per cui non ho trovato nulla su questo.)

Questa storia ha due modelli Ranking e Artist, Ranking è genericamente correlate a Artist (object_id, content_type ... tutta la baracca).

Ho una lista di oggetti restituiti da Ranking.objects.values_list() ordinato da un determinato campo (nel mio caso score). Quindi, ovviamente, se voglio visualizzare un elenco di artisti che sono stati classificati, mi piacerebbe li voglio nello stesso ordine. Ho provato diversi metodi, come ad esempio .filter(pk__in=list), .in_bulk(list), ecc provato costringere il risultato di .values_list() in una tupla troppo.

Sono tutti prendono la mia lista:

>>> 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]

E restituirlo in questo modo:

>>> 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]

(sto solo dando gli ID nel secondo caso per il bene di sanità mentale.)

In questo momento l'unico modo in cui posso arrivare a questo lavoro è quello di creare una lista vuota e ciclo attraverso la query non values_list().

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

Questo solo produce query n, quindi mi chiedo se c'è un modo migliore. Come mostrato dai tag, sto usando PostgreSQL.

È stato utile?

Soluzione

Questo non è causato da Django; il database li sta tornando in questo ordine dal viene specificato nessun ordinamento.

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