Я пытаюсь получить простую сумму для столбца с несколькими строками в наборе запросов. Мой прямой вопрос (а) как мне установить get_queryset()
, чтобы включить сумму столбца и (б) как я могу получить доступ к этому элементу в шаблоне? Следующий этот вопрос:
#models.py
class ItemPrice( models.Model ):
price = models.DecimalField ( max_digits = 8, decimal_places=2 )
....
Предусмотрено два ответа - один с использованием метода .aggregate()
, который, как мне кажется, не возвращает набор запросов, и метод .annotate()
, который, как мне кажется, добавляет элемент в набор запросов.
Итак, я ожидал, что следующее добавит еще один элемент в список объектов в этом представлении:
#views.py
def get_queryset(self):
# generate table and filter down to a subquery.
queryset = ItemPrice.objects.filter(<some_filter>)
# sum the price for each row in the subquery.
queryset = queryset.annotate(totals=Sum('price'))
return queryset
Тогда в Шаблоне я мог бы перебирать список объектов следующим образом:
#template.html
{% for item in object_list %}
{{ item }}
{% endfor %}
С ожиданием, что один из пунктов (последний элемент?) Будет price_sum
и что баланс может быть получен как price_sum.price
.
Однако, когда я добавляю следующее в свой шаблон, я получаю цены для каждой позиции - без суммирования.
{% for item in object_list %}
{{ item.totals }}
{% endfor %}
Но я не могу получить доступ к предмету. Я не знаю, если проблема заключается в изменении вида get_queryset()
или в шаблоне?