2011-01-18 4 views
6

je dois récupérer une liste d'enregistrements pour le tableau suivant avec des valeurs distinctes en ce qui concerne le nom:Récupérer des enregistrements distincts basés sur une colonne de Django

Class C: 

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

J'ai besoin de se débarrasser de toutes les valeurs en double pour nom et affiche uniquement ce qui suit:

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

Comme vous pouvez le voir, il ressemble presque à un ensemble python. Je peux probablement générer l'ensemble en utilisant Python, mais je me demande si l'ORM de Django a cette fonctionnalité.

J'ai essayé d'utiliser distinct, mais il n'accepte aucun argument pour spécifier quelle colonne doit avoir des valeurs distinctes. Une idée de comment faire fonctionner cette requête?

+1

Voulez-vous juste la première valeur pour chaque nom, ou quoi? –

+0

Soit en premier, soit en dernier. – mohi666

+0

Eh bien, vous devriez en choisir un, car les premières et dernières valeurs sont différentes. Voulez-vous vraiment du hasard arbitraire? – sdolan

Répondre

16

.distinct() est l'outil, mais voici la syntaxe que je devais utiliser:

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

De cette façon, vous obtenez seulement une liste [A, B, C, D] des valeurs, et non les objets themseleves.

+1

Cela ne fonctionnera qu'avec PostgreSQL. Si vous utilisez MySQL ou SQLite, vous n'avez pas de chance. –

+3

@SerafimS. Cela fonctionne dans MySQL et SQLite. Faire * distinct sur * ne fonctionne pas PostgreSQL, mais la requête dans cette réponse ne fait pas de distinction sur! – dbn

Questions connexes