Django SUM Query?

У меня есть запрос, похожий на следующее:

SELECT SUM(ISNULL(table.name)) FROM table

Как это SUM перевести в QuerySet в Django? (т.е. какая операция xyz это переводит, в чем-то вроде MyModel.objects.xyz()?)

2 ответа

Решение

Обновление: следующее включает ISNULL аспект исходного запроса:

from django.db.models import Sum

ModelName.objects.filter(field_name__isnull=True).aggregate(Sum('field_name'))

Вы ищете функцию агрегирования Sum, которая работает следующим образом:

ModelName.objects.aggregate(Sum('field_name'))

См.: https://docs.djangoproject.com/en/dev/ref/models/querysets/

Вы также можете использовать псевдоним возвращаемого значения:

      MyModel.objects.aggregate(total=Sum('field_1'))

который возвращает словарь, такой как{'total': 12345}.

Если вам нужно отфильтровать суммируемые значения, другой способ — использоватьfilter=параметрSumобъект черезQобъект. Следующее возвращает общее количествоfield_1значения, где соответствующиеfield_2значения имеют значение null, т.е. эквивалент SQL-запроса.SELECT SUM(field_1) FROM table WHERE field_2 IS NULL.

      from django.db.models import Q, Sum
MyModel.objects.aggregate(total=Sum('field_1', filter=Q(field_2__isnull=True)))

Вы также можете использовать словарь для хранения суммы и распаковывать ее в качестве аргументов ключевого слова при передачеaggregate().

      dct = {'total': Sum('field_1', filter=Q(field_2__isnull=True))}
MyModel.objects.aggregate(**dct)

оба из которых возвращают словарь, такой как{'total': 1234}.

Другие вопросы по тегам