Intenté absolutamente todo con valores(). anotar() o agregado() , o siguiendo tutoriales con Subquery no puedo obtener lo que quiero, déjame explicarte:
Esto es lo que obtengo con QuizzUserItem.objects.filter(examuser=user_exam).values('item__question', 'item')
{'item': 759, 'item__question': 429} {'item': 762, 'item__question': 430} {'item': 763, 'item__question': 430} {'item': 767, 'item__question': 431}Lo que quiero es agrupar por item__question y obtener este resultado:
{'item': 759, 'item__question': 429} {'item': 762,763 'item__question': 430} {'item': 767, 'item__question': 431}Empiezo a pensar que no hay absolutamente ninguna manera :/
Lo que probé:
QuizzUserItem.objects.filter(examuser=user_exam).values('item__question','item').annotate(items_number=Count('item__question'))
Obtuve :
{'item': 759, 'item__question': 429, 'items_number': 1} {'item': 762, 'item__question': 430, 'items_number': 1} {'item': 763, 'item__question': 430, 'items_number': 1} {'item': 767, 'item__question': 431, 'items_number': 1}o
QuizzUserItem.objects.filter(examuser=user_exam).values('item__question').annotate(items_number=Count('item__question'))Este es el resultado más cercano que obtuve:
{'item__question': 429, 'items_number': 1} {'item__question': 430, 'items_number': 2} {'item__question': 431, 'items_number': 1}Pero no tengo el item_ids 762,763...
Gracias por leer
Puede trabajar con el agregado ArrayAgg [Django-doc] para obtener una lista de elementos:
from django.contrib.postgres.aggregates import ArrayAgg QuizzUserItem.objects.filter( examuser=user_exam ).values( 'item__question' ).annotate( items=ArrayAgg('item') ).order_by('item__question')