Как группировать по с помощью annotate в django?

Я попробовал абсолютно все с помощью values().annotate() или aggregate(), или следуя учебникам с Subquery я не могу получить то, что хочу, позвольте мне объяснить :

Вот что получается при 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}

Я хочу сгруппировать по item__question и получить такой результат:

{'item': 759, 'item__question': 429}
{'item': 762,763 'item__question': 430}
{'item': 767, 'item__question': 431}

Я начинаю думать, что нет абсолютно никакого способа :/


Что я пробовал :

QuizzUserItem.objects.filter(examuser=user_exam).values('item__question','item').annotate(items_number=Count('item__question'))

Я получил :

{'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}

или

QuizzUserItem.objects.filter(examuser=user_exam).values('item__question').annotate(items_number=Count('item__question'))

Это самый близкий результат, который я получил :

{'item__question': 429, 'items_number': 1}
{'item__question': 430, 'items_number': 2}
{'item__question': 431, 'items_number': 1}

Но у меня нет item_ids 762,763...

Спасибо, что прочитали

Вы можете работать с агрегатом ArrayAgg [Django-doc] для получения списка элементов:

from django.contrib.postgres.aggregates import ArrayAgg

QuizzUserItem.objects.filter(
    examuser=user_exam
).values(
    'item__question'
).annotate(
    items=ArrayAgg('item__question')
).order_by('item__question')
Вернуться на верх