У меня есть модель
class ItemPrice( models.Model ):
price = models.DecimalField ( max_digits = 8, decimal_places=2 )
....
Я попробовал это для вычисления суммы price
в этом queryset:
items = ItemPrice.objects.all().annotate(Sum('price'))
что случилось в этом запросе? или есть ли любой другой способ вычислить Сумму price
столбец?
Я знаю, что это может быть сделано при помощи для цикла на queryset, но мне нужно изящное решение.
Спасибо!
Используя cProfile профилировщик , я нахожу, что в моей среде разработки, более эффективно (быстрее) суммировать значения списка, чем к агрегату с помощью Sum()
. например:
sum_a = sum([item.column for item in queryset]) # Definitely takes more memory.
sum_b = queryset.aggregate(Sum('column')).get('column__sum') # Takes about 20% more time.
я протестировал это в различных контекстах, и кажется, что использование aggregate
берет всегда дольше для приведения к тому же результату. Хотя я подозреваю, что могли бы быть преимущества, мудрые памятью для использования его вместо того, чтобы суммировать список.