with tutorial the para latest framework espaƱol desde cero applications django django-models django-aggregation django-filters

tutorial - the django project



Django order_by() filtro con distinto() (3)

¿Cómo puedo hacer un order_by como este ....

p = Product.objects.filter(vendornumber=''403516006'')/ .order_by(''-created'').distinct(''vendor__name'')

El problema es que tengo varios proveedores con el mismo nombre y solo quiero el último producto del proveedor.

Espero que tenga sentido?

Tengo este error de base de datos:

Las expresiones SELECT DISTINCT ON deben coincidir con las expresiones iniciales ORDER BY LÍNEA 1: SELECT DISTINCT ON ("search_vendor". "Name") "search_product" ...


¿Simplemente la coincidencia de leftmost order_by () arg y distinct () no funcionó para mí, generando el mismo error (error Django 1.8.7 o una característica)?

qs.order_by(''project'').distinct(''project'')

sin embargo funcionó cuando cambié a:

qs.order_by(''project_id'').distinct(''project'')

y ni siquiera tengo multiples order_by args.


Según su mensaje de error y esta otra pregunta , me parece que esto lo solucionaría:

p = Product.objects.filter(vendornumber=''403516006'')/ .order_by(''vendor__name'', ''-created'').distinct(''vendor__name'')

Es decir, parece que las expresiones DISTINCT ON deben coincidir con las expresiones ORDER BY la izquierda. Entonces, al hacer que la columna que usas sea distinct la primera columna en order_by , creo que debería funcionar.


Tuve un problema similar pero luego con campos relacionados. Con solo agregar el campo relacionado en distinct() , no obtuve los resultados correctos.

Quería ordenar por room__name de room__name manteniendo a la person (vinculada a la residency ) única. Repitiendo el campo relacionado de acuerdo con lo siguiente, solucioné mi problema:

.order_by(''room__name'', ''residency__person'', ).distinct(''room__name'', ''residency__person'')

Vea también estas publicaciones relacionadas: