2011-01-18 22 views
6

que necesitan para recuperar una lista de registros para el siguiente cuadro con valores distintos en lo que respecta al nombre:recuperación de registros distintos basados ​​en una columna de Django

Class C: 

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

necesito para deshacerse de todos los valores duplicados para nombrar y solo mostrar lo siguiente:

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

Como puede ver, casi parece un conjunto de pitones. Probablemente pueda generar el conjunto usando Python, pero me pregunto si el ORM de Django tiene esta característica.

Intenté usar distinct, pero no acepta ningún argumento para especificar qué columna debe tener valores distintos. ¿Alguna idea de cómo hacer que esta consulta funcione?

+1

¿Quiere el primer valor para cada nombre, o qué? –

+0

Ya sea primero o último. – mohi666

+0

Bueno, deberías elegir uno, porque el primer y el último valor son diferentes. ¿De verdad quieres aleatoriedad arbitraria? – sdolan

Respuesta

16

.distinct() es la herramienta, pero aquí es la sintaxis que tuve que usar:

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

De esta manera se consigue solamente una lista [A, B, C, D] de valores, no los objetos themseleves.

+1

Esto funcionará solo con PostgreSQL. Si está utilizando MySQL o SQLite, no tiene suerte. –

+3

@SerafimS. Esto funciona en MySQL y SQLite. Hacer * distinct on * no funciona PostgreSQL, pero la consulta en esta respuesta no hace una distinción en! – dbn

Cuestiones relacionadas