with tutorial latest framework español desde con cero applications django django-aggregation

tutorial - Cómo agrupar por AND agregado con Django



tutorial django (2)

Prueba esto:

Rating.objects.filter(attribute__in=attributes) / .values(''location'') / .annotate(score = Sum(''score'')) / .order_by(''-score'')

Tengo una consulta bastante simple que me gustaría hacer a través de la ORM, pero no puedo resolverlo ...

Tengo tres modelos:

Ubicación (un lugar), Atributo (un atributo que un lugar podría tener) y Clasificación (un modelo M2M ''a'' que también contiene un campo de puntaje)

Quiero elegir algunos atributos importantes y poder clasificar mis ubicaciones según esos atributos, es decir, una puntuación total más alta sobre todos los atributos seleccionados = mejor.

Puedo usar el siguiente SQL para obtener lo que quiero:

select location_id, sum(score) from locations_rating where attribute_id in (1,2,3) group by location_id order by sum desc;

que devuelve

location_id | sum -------------+----- 21 | 12 3 | 11

Lo más cercano que puedo obtener con el ORM es:

Rating.objects.filter( attribute__in=attributes).annotate( acount=Count(''location'')).aggregate(Sum(''score''))

Que devuelve

{''score__sum'': 23}

es decir, la suma de todos, no agrupados por ubicación.

De cualquier forma alrededor de esto? Podría ejecutar el SQL manualmente, pero preferiría ir a través del ORM para mantener la coherencia.

Gracias


Puedes probar esto

Rating.objects.values(''location_id'').filter(attribute__in=attributes).annotate(sum_score=Sum(''score'')).