首页 > 解决方案 > Django:有没有办法在搜索后重新聚合总和?

问题描述

目前在我的ListView中有一个过滤器,它只显示当前月份和年份的数据,它聚合了Sum。现在,在我的过滤中存在三个问题。

第一个问题;过滤器只能显示当前月份和年份,用户无法查看之前的月份和年份。

第二个问题;date__icontains的搜索过滤器只接受月份的数值。

第三个问题;在我为某个月份添加搜索过滤器后,过滤器不会重新聚合Sum

这是我的工资单视图

class PayrollView(LoginRequiredMixin, ListView):
    template_name = 'payroll/payroll.html'

    def get(self, request, *args, **kwargs):
        search = request.GET.get('search')
        user = request.user.staffs.full_name
        current_month = datetime.date.today().month
        current_year = datetime.date.today().year
        payroll_list = VaPayroll.objects.all()
        payroll_data = payroll_list.filter(Q(virtual_assistant__name=user),
                                           Q(date__month=current_month))
        total_salary = VaPayroll.objects.filter(Q(virtual_assistant__name=user), 
                                                Q(date__month=current_month), 
                                                Q(date__year=current_year)).aggregate(Sum('salary'))
        if search:
            payroll_data = payroll_list.filter(Q(virtual_assistant__name=user),
                                               Q(date__icontains=search))

            payroll_data
        context = {
            'total_salary': total_salary,
            'payroll_data': payroll_data
        }   
        return render(request, self.template_name, context)

如何获得基于某个月份在每次搜索后汇总总和的结果?

标签: djangopython-3.xdjango-views

解决方案


我已经想通了,我刚刚在 if搜索语句中添加了 total_salary 并将date__month=current_month替换为date__month =search


推荐阅读