Получение верхних строк по одному столбцу Django
Я делаю задание на категоризацию доходов и расходов, из приложения движений. Для этого мне нужно получить категорию в плитке, с большим количеством случаев.
Например, в этом Сценарии:
| title | category | count |
| ----- | -------------- | ----- |
| Pizza | food | 6 |
| Pizza | others_expense | 1 |
| Pizza | refund | 1 |
Я хочу вернуть только первый ряд, потому что название одинаковое, а категория food
используется с наибольшей частотой.
Пример кода
Я хочу получить результат, используя только Django ORM, потому что у меня есть разные базы данных и это быстрее, чем итерация над большим списком.
Модель:
class Movimentation(models.Model):
title = models.CharField(max_length=50)
value = models.FloatField()
category = models.CharField(max_length=50)
Consult:
Моя фактическая консультация в Django ORM такова.
Movimentation.objects \
.values('title', 'category') \
.annotate(count=Count('*')).order_by('title', '-count')
Результат:
[
{'title': 'Pizza', 'category': 'food', 'count': 6},
{'title': 'Pizza', 'category': 'others_expense', 'count': 1},
{'title': 'Pizza', 'category': 'refund', 'count': 1},
{'title': 'Hamburguer', 'category': 'food', 'count': 1},
{'title': 'Clothing', 'category': 'personal', 'count': 18},
{'title': 'Clothing', 'category': 'home', 'count': 15},
{'title': 'Clothing', 'category': 'others_expense', 'count': 1}
]
Ожидаемый результат:
В этом случае я получаю только одну строку по названию, с наиболее используемой категорией.
[
{'title': 'Pizza', 'category': 'food', 'count': 6},
{'title': 'Hamburguer', 'category': 'food', 'count': 1},
{'title': 'Clothing', 'category': 'personal', 'count': 18}
]