У меня есть 2 модели:
class Task(models.Model):
user = models.ForeignKey(
to='users.User',
on_delete=models.CASCADE,
related_name='tasks',
)
category = models.ForeignKey(
to='TaskCategory',
on_delete=models.CASCADE,
related_name='tasks',
blank=True,
null=True,
)
difficult = models.DecimalField(
max_digits=10,
decimal_places=2,
validators=(MinValueValidator(Decimal('0.01')),),
)
class TaskCategory(models.Model):
user = models.ForeignKey(
to='users.User',
on_delete=models.CASCADE,
related_name='task_categories',
)
name = models.CharField(
max_length=255,
)
Мой ендпоинт должен выдавать топ 3 категории (с суммой сложности задач), и еще одну в которой в name выводить - 'другое' и в tasks_sum - их общую сумму сложности (категорий, которые не вошли в топ 3).
Сейчас у меня получается следующее:
Task.objects.values('category__name').annotate(
category_sum=Coalesce(
Sum('difficult'),
0,
output_field=DecimalField()
)
).filter(
category__isnull=False
).order_by('-category_sum')
И следующий вывод (вывожу только необходимые поля):
[
{
"name": "Работа",
"category_sum": "124.00"
},
{
"name": "Домашние дела",
"category_sum": "110.00"
}
{
"name": "Работа",
"category_sum": "100.00"
},
{
"name": "И еще другая*",
"category_sum": "54.00"
},
{
"name": "И какая-то)",
"category_sum": "30.00"
},
]
Мне нужно что-то вроде этого:
[
{
"name": "Работа",
"category_sum": "124.00"
},
{
"name": "Домашние дела",
"category_sum": "110.00"
}
{
"name": "Работа",
"category_sum": "100.00"
},
{
"name": "Другое",
"category_sum": "84.00"
},
]