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
相关产品推荐
相关产品推荐

