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

Django如何展示去重查询集 按dashboard_id去重后表格不显示值怎么解决

问题根因

你当前代码中values_list('dashboard_id', flat=True).distinct()返回的是仅包含dashboard_id值的一维序列,不是完整的Reports模型对象集合,所以模板中访问report.user、report.created_at等关联字段和属性时没有对应数据,自然无法正常渲染。

解决方案

方案1:PostgreSQL数据库专属写法(最简洁)

Django针对PostgreSQL数据库支持distinct()指定去重字段,可直接返回完整模型对象,模板无需修改即可正常渲染:

# views.py 修改后的代码
def reports_list(request):
    # 按dashboard_id去重,相同dashboard_id默认取created_at最早的一条,要保留最新的就把created_at改成-created_at
    report_list = Reports.objects.order_by('dashboard_id', 'created_at').distinct('dashboard_id')
    context = {
        'report_list': report_list,
    }
    return render(request, "report_list.html", context)

方案2:全数据库兼容通用写法

如果使用的是MySQL、SQLite等不支持distinct指定字段的数据库,可以手动实现去重逻辑:

# views.py 修改后的代码
def reports_list(request):
    # 先拿到所有去重后的dashboard_id
    dash_ids = Reports.objects.values_list('dashboard_id', flat=True).distinct()
    report_list = []
    for dash_id in dash_ids:
        # 每个dashboard_id取对应的一条记录,可通过调整order_by规则选择要保留的条目
        report = Reports.objects.filter(dashboard_id=dash_id).order_by('-created_at').first()
        if report:
            report_list.append(report)
    context = {
        'report_list': report_list,
    }
    return render(request, "report_list.html", context)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:54:04