2012-09-13 19 views
10

Tengo una base de datos MySQL desafortunadamente utilizada con Django 1.4.1. La función distintiva solo funciona para POSTGRESQL si lo hago bien.consulta distinta de Django MySQL para obtener valores múltiples

Tengo que hacer una consulta distinta constan de múltiples valores, mientras que sólo uno distinto,

igual; Este funciona para POSTGRE pero no con MYSQL, Aparece el siguiente error;

DISTINCT ON campos no es compatible con esta base de datos backend

staff = Staff.objects.order_by('person__full_name').distinct('person__full_name') 

Luego probé

staff = Staff.objects.values('person__full_name','staff_job_categories').distinct().order_by('person__full_name') 

Pero no obtienen valores distintos porque consigo también las categorías de trabajo del personal . Pero cuando no lo tengo, no puedo obtenerlo como matriz.

¿Alguna idea?

Respuesta

16

.distinct([*fields]) solo funciona en PostgresSQL.

De distinct documentación

Aquí está la diferencia. Para una llamada distinct() distinta, la base de datos compara cada campo en cada fila al determinar qué filas son distintas. Para una llamada distinct() con nombres de campo especificados, la base de datos solo comparará los nombres de campo especificados.

Como se indica, se marcan todos los campos de un registro. Lo más probable es que en su caso esté obteniendo registros con diferentes valores de campo (más probable es que sea un caso si está consultando varias tablas de relaciones ManyToMany o ForeignKey).

Para consolidar como un array se puede referir a su pregunta anterior Django Query distinct values works but i cant use the query result

5
names = Staff.objects.order_by('person__full_name').values('person__full_name').distinct() 

le dará distintos nombres completos, y se puede hacer una cosa similar para obtener categorías de trabajo distintas.

Esto le dará listas de valores, no objetos en sí, pero si interpreto su pregunta correctamente, entonces creo que estos le darán lo que quiere.

Cuestiones relacionadas