2015-09-24 6 views
0

Я хочу агрегировать количество товара для каждого дня отдельно.Агрегирование данных (дней) в шаблоне

Модель:

class Bill(models.Model): 
    date = models.DateTimeField() 
    amount = models.IntegerField(null=False, blank=False) 

Шаблон:

{% with var=bill.date|date:"Y-m-d" %} 
     {{ var }} #dict? 
    {% endwith %} 

Я думаю, что добавить дату в словарь в качестве ключа, и подсчитать количество товара как ценность является хорошей идеей, так что я пишу it:

Dict[var] += bill.amount 

Как его использовать в шаблоне Django?

Я на правильном пути? Может быть, другое решение лучше?

+0

эй, я видел ваш комментарий, что вы удалили. Я добавил примеры только сейчас. Вы могли бы найти их путем поиска/поиска в stackoverflow. – Lucas03

+0

Большое вам спасибо. – Jareq

ответ

0

Использовать aggregation/annotate для получения sum of amount by date. В шаблоне просто напечатайте его значение, как обычно, с помощью запросов.

1. Если у вас есть дата и время с такими же значениями (часы, минуты и секунды), вы должны иметь возможность использовать следующее.

bills = Bill.objects.values('date').annotate(Sum('amount')) 

В шаблоне просто использовать

{% for bill in bills %} 
    {{ bill.date }} - {{ bill.sum__amount }} 
{% endfor %} 

2. Если у вас есть DateTime с различными часов, и вы хотите сгруппировать по дате и распечатать его сумму:

bills = Bill.objects.extra(select={'day': 'date(date)'})\ 
        .values('day').annotate(Sum('amount')) 

И затем распечатайте его:

{% for bill in bills %} 
    {{ bill.day }} - {{ bill.sum__amount }} 
{% endfor %} 

3. Если вы хотите сделать вычисления в шаблоне, который я настоятельно не рекомендую, посмотреть на regroup

Смежные вопросы