Django запрос для получения списка сумм подсчета различных вариантов выбора
Я пытаюсь получить список суммы подсчета различных вариантов. Выбор - это строки, поэтому я хочу подсчитать одинаковые строки и получить их сумму, а затем сделать то же самое для других вариантов. Я сделал запрос, но он не дает мне общее количество каждого выбора, а перечисляет их все с количеством 1.
model.py
class sublist(models.Model):
Music = 'Music'
Video = 'Video'
Gaming = 'Gaming'
News = 'News'
Lifestyle = 'Lifestyle'
Access = 'Access'
SUBTYPE_CHOICES =(
(Music , "Music"),
(Video , "Video"),
(Gaming , "Gaming"),
(News , "News"),
(Lifestyle , "Lifestyle"),
(Access , "Online Access"),
)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,)
name = models.CharField(max_length=150)
cost = models.FloatField(default = 0)
subtype = models.CharField(max_length= 50, choices = SUBTYPE_CHOICES, default = Access)
Вот мой запрос. (я пытался придумать другие комбинации, изучив документацию, но безуспешно)
expenselist = sublist.objects.filter(author = curruser.id)
subtypecount = list((expenselist
.annotate(subcount=Count('subtype'))
.values('subtype', 'subcount')
))
результат запроса выше: [{'subtype': 'Access', 'subcount': 1}, {'subtype': 'Access', 'subcount': 1},{'subtype': 'Video', 'subcount': 1}]
Желаемый результат: [{'subtype': 'Access', 'subcount': 2},{'subtype': 'Video', 'subcount': 1}]
Вот запрос, который даст желаемый результат. Сначала используйте .values(), затем .annotate()
subtypecount = sublist.objects.filter(author = curruser.id).values('subtype').annotate(subcount=Count('subtype'))
или
expenselist = sublist.objects.filter(author = curruser.id)
subtypecount = list(expenselist.values('subtype').annotate(subcount=Count('subtype')))