Django实现按Canva主键动态筛选带外键的Bilan表导出Excel的问题
修改步骤
1. 修改视图函数export_users_xls(views.py)
首先给函数新增pk参数接收路由传入的主键,同时替换写死的筛选条件,还可以补充404校验和动态文件名优化:
# 开头新增导入 from django.shortcuts import get_object_or_404 from .models import Canva def export_users_xls(request, pk): # 校验Canva是否存在,不存在返回404 canva = get_object_or_404(Canva, pk=pk) response = HttpResponse(content_type='application/ms-excel') # 动态生成文件名,带上当前Canva名称 response['Content-Disposition'] = f'attachment; filename="{canva.name}_Canvas.xls"' wb = xlwt.Workbook(encoding='utf-8') ws = wb.add_sheet('canvas list') # 表头部分无需修改 row_num = 0 font_style = xlwt.XFStyle() font_style.font.bold = True columns = ['agregat', 'scf', 'mois1', ] for col_num in range(len(columns)): ws.write(row_num, col_num, columns[col_num], font_style) # 替换写死的canva_id=1为传入的pk rows = Bilan.objects.filter(canva_id=pk).values_list('agregat', 'SCF') font_style = xlwt.XFStyle() for row in rows: row_num += 1 for col_num in range(len(row)): ws.write(row_num, col_num, row[col_num], font_style) wb.save(response) return response
2. 确认模板导出链接配置
你当前的导出链接写法没有问题,前提是你的CanvaConsultlView已经将canva对象传入模板上下文:
<a href="{% url 'bilans:export_excel' canva.pk %}" role="button" class="btn btn-secondary w-50">export to excel</a>
注意:如果你没有在app的urls.py中配置
app_name = 'bilans',需要去掉url标签中的bilans:前缀,改为{% url 'export_excel' canva.pk %}
3. 路由校验
你当前的路由配置已经正确设置了pk参数传递,无需修改。
内容的提问来源于stack exchange,提问作者CSofiane
相关产品推荐
相关产品推荐

