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

Django应用开发:如何获取cVisit模型的访问原因并导出

Django导出Excel时获取cVisit对应访问原因的解决方案

核心逻辑

你的cVisit模型通过visitReason外键关联visitCategory,每条cVisit记录可通过detail.visitReason访问关联的分类对象,再读取其visitReason字段获取具体原因。需注意处理外键为null的场景,避免抛出异常。

修改后的导出代码

def export_to_excel(request, id):
    response = HttpResponse(content_type='application/ms-excel')
    response['Content-Disposition'] = 'attachment; filename="export.xlsx"'

    wb = Workbook()
    ws = wb.active
    ws.title = "Products"

    # 更新表头,新增访问原因列
    headers = ["访问日期", "工作时长", "负载时长", "备注", "访问原因"]
    ws.append(headers)

    machine_details = Machines.objects.get(id=id)
    # 用select_related预加载关联数据,减少数据库查询次数
    details = machine_details.visit.all().select_related('visitReason')

    for detail in details:
        # 处理外键为空的情况,避免报错
        visit_reason = detail.visitReason.visitReason if detail.visitReason else "未记录"
        ws.append([detail.visitDate, detail.workingHours, detail.loadHours, detail.cNotes, visit_reason])

    wb.save(response)
    return response

额外优化建议

  • 遵循Django命名规范:将模型类名改为大驼峰格式,如visitCategory→VisitCategory、cVisit→Visit,提升代码可读性。
  • 若业务上要求visitReason不能为空,可去掉模型中blank=True, null=True的设置,简化空值处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:56:28