Мне нужно выполнить агрегацию в наборе запросов django для наборов данных.
У меня есть модель, которая выглядит примерно так:
class Model1(models.Model):
... some fields here ...
class Model2(models.Model):
model1 = models.ForeignKey(Model1)
number = models.IntegerField()
active = models.BooleanField()
category = models.CharField(choices=...)
Они отлично работают, на случай, если в этом демонстрационном коде пропущена опечатка Теперь я хочу отобразить model1s с соответствующими им model2s, сгруппированными по категориям. Я делаю это, используя тег шаблона перегруппировки (обратите внимание, у меня есть метод класса model2s, который возвращает все то же самое, что и model2_set.filter (active = True)):
{% regroup m1.model2s by category as m2_list %}
Затем я отображаю их как обычно с перегруппировкой. Этот материал также отлично работает. Теперь мне нужно добавить итоговую сводку в начало каждой группы категорий с суммой чисел для этой группы. Поэтому, если у меня было 2 модели2 из той же категории, ссылающиеся на 1 Модель1, и у одной из них было число = 1, а у другой - число = 2, то мне нужно отобразить 3.
На самом деле будет много Model2, поэтому это может быть дорогостоящим запросом.
Я посмотрел на документы и вижу совокупность и аннотации, но ни один из них, похоже, не позволил мне сделать сумму, основанную на категории. Я не хотел бы делать это для каждой категории:
m2sum = m1.model2s.filter(category='something').aggregate(Sum('number'))['number__sum']
Есть ли более чистый способ сделать это, надеюсь, один из них хорошо работает с regroup?