2011-01-18 15 views
6

muszę pobrać listę rekordów dla poniższej tabeli z różnych wartości w odniesieniu do nazwy:Odzyskiwanie odrębne rejestry oparte na kolumnie na Django

Class C: 

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

muszę się pozbyć wszystkich zduplikowanych wartości dla nazwa i pokaż tylko:

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

Jak widać, wygląda prawie jak zestaw Pythona. Prawdopodobnie mogę wygenerować zestaw za pomocą Pythona, ale zastanawiam się, czy ORM Django ma tę funkcję.

Próbowałem użyć polecenia distinct, ale nie akceptuję żadnego argumentu w celu określenia, która kolumna ma mieć różne wartości. Masz pomysł, jak uruchomić to zapytanie?

+1

Czy potrzebujesz tylko pierwszej wartości dla każdego imienia lub czego? –

+0

Albo pierwszy, albo ostatni. – mohi666

+0

Powinieneś wybrać jedną, ponieważ pierwsza i ostatnia wartość są różne. Czy naprawdę chcesz arbitralnej losowości? – sdolan

Odpowiedz

16

.distinct() jest narzędziem, ale tutaj jest składnia musiałem użyć:

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

W ten sposób można dostać tylko listę [A, B, C, D] wartości, a nie themseleves obiektów.

+1

To będzie działać tylko z PostgreSQL. Jeśli używasz MySQL lub SQLite, nie masz szczęścia. –

+3

@SerafimS. Działa to w MySQL i SQLite. Działanie * odrębne na * nie działa w PostgreSQL, ale zapytanie w tej odpowiedzi nie jest wyraźne! – dbn

Powiązane problemy