You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django使用django-filter筛选后如何动态更新Decimal列合计值

问题原因

你当前代码中的合计值是直接对全量expense数据表做聚合计算得到的,没有使用经过日期、站点编码筛选后的数据集,所以筛选操作不会触发合计值同步更新。

解决方案

仅需调整views.py中的聚合逻辑,对筛选后的查询集做求和即可:

# views.py 修改后完整代码
from django.db.models import Sum

def expense_table(request):
    item = expense.objects.all().order_by('IncludeTax')
    search_list = expense.objects.all().order_by('user__Site_Code', 'Date')
    search_filter = expenseFilter(request.GET, queryset=search_list)
    # 核心修改:对筛选后的结果集做聚合,无数据时默认返回0避免前端显示空值
    add = search_filter.qs.aggregate(Sum('IncludeTax'))['IncludeTax__sum'] or 0
    return render(request, 'expense/MExpense.html', {'item': item, 'filter': search_filter, 'add': add})

补充说明

如果你页面上展示的费用列表是用item变量渲染而非filter.qs,需要同步修改item的取值为筛选后的结果,避免列表和合计值不匹配:

# 将原item行替换为以下代码,放在search_filter定义之后
item = search_filter.qs.order_by('IncludeTax')

原有filters.py、models.py和前端模板代码无需修改,调整后合计值就会随筛选条件动态更新。


内容的提问来源于stack exchange,提问作者sshell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:18:04