2011-01-18 13 views
6

ho bisogno di recuperare un elenco di record per la seguente tabella con i valori distinti per quanto riguarda il nome:Recupero record distinti sulla base di una colonna su Django

Class C: 

name    value 
A ------------------ 10 
A ------------------ 20 
A ------------------ 20 
B ------------------ 50 
C ------------------ 20 
D ------------------ 10 
B ------------------ 10 
A ------------------ 30 

Ho bisogno di sbarazzarsi di tutti i valori duplicati per nome e mostrare solo il seguente:

name    value 
A ------------------ 30 
B ------------------ 10 
C ------------------ 20 
D ------------------ 10 

Come si può vedere, sembra quasi un set python. Probabilmente posso generare il set usando Python, ma mi chiedo se l'ORM di Django abbia questa caratteristica.

Ho provato a utilizzare distinto, ma non accetta alcun argomento per specificare quale colonna deve avere valori distinti. Qualche idea su come far funzionare questa query?

+1

Volete solo il primo valore per ogni nome o cosa? –

+0

O prima o ultima. – mohi666

+0

Bene, dovresti sceglierne uno, perché il primo e l'ultimo valore sono diversi. Vuoi davvero casualità arbitraria? – sdolan

risposta

16

.distinct() è lo strumento, ma qui è la sintassi ho dovuto usare:

Model.objects.values_list('name', flat=True).distinct() 

In questo modo si ottiene solo una lista [A, B, C, D] di valori, non gli oggetti themseleves.

+1

Funzionerà solo con PostgreSQL. Se stai usando MySQL o SQLite, sei sfortunato. –

+3

@SerafimS. Funziona su MySQL e SQLite. Facendo * distinto su * non funziona PostgreSQL, ma la query in questa risposta non lo distingue! – dbn

Problemi correlati