Вы можете создать метод, который будет динамически добавлять поля к агрегации:
from django.db.models import Sum
from django.db.models.fields import PositiveIntegerField, PositiveSmallIntegerField
class Get5StatsPlayers(models.Model):
...
@staticmethod
def aggregate_many(model, qs, exclude=None):
exclude_fields = exclude if exclude else []
model_fields = model._met.get_fields()
int_fields = [field for field in model_fields if isinstance(field, (PositiveIntegerField, PositiveSmallIntegerField)) and field.name not in exclude_fields]
aggregation_fields = dict([(f'{field.name}_sum', Sum(f'{field.name}')) for field in int_fields])
return qs.aggregate(**aggregation_fields)
И затем вызвать этот метод:
aggregated_qs = Get5StatsPlayers.aggregate_many(Get5StatsPlayers, your_queryset)
В результате все ваши целочисленные поля в любой модели если вы перейдете к функции, она будет автоматически добавлена к агрегации.
Вы можете сделать это еще более удобным для использования, переместив ее в менеджер моделей.