首页 > 解决方案 > 按日期视图过滤的 Django 对象总和

问题描述

我想通过使用通用日期视图获得我获得的项目总和。

示例视图.py

class OrderDayArchiveView(LoginRequiredMixin, generic.dates.DayArchiveView):
    queryset = Order.objects.all()
    date_field = 'date_ordered'
    template_name = 'ordersys/manager/archive_page.html'

示例模板:

{% for order in object_list %}
    <li class="bg-light">
        {{ order.id }}: {{order.print_ordered_items_products_amounts}} (${{order.create_cost}}) 
    </li>
{% endfor %}

urls.py 中的示例路径:

path('<int:year>/<int:month>/<int:day>/', views.OrderDayArchiveView.as_view(month_format='%m'), name="archive_day"),

我想获取发送到模板的所有“order.create_cost”的总和,是否可以在此视图中获取过滤的查询集?如果没有,我如何在模板中总结它。

标签: pythondjangodateview

解决方案


您可以简单地覆盖get_context_data并在那里添加您的聚合:

from django.db.models import Sum

class OrderDayArchiveView(LoginRequiredMixin, generic.dates.DayArchiveView):
    queryset = Order.objects.all()
    date_field = 'date_ordered'
    template_name = 'ordersys/manager/archive_page.html'
    
    def get_context_data(self, *, object_list=None, **kwargs):
        context = super().get_context_data(object_list=object_list, **kwargs)
        queryset = context['object_list']
        sum_create_cost = queryset.aggregate(Sum('create_cost'))['create_cost__sum']
        context['sum_create_cost'] = sum_create_cost
        return context

推荐阅读