Django Import Export自定义仅导表头功能如何绑定指定按钮不影响默认导出
实现方案
不需要新增专属URL,通过给Template按钮增加专属查询参数区分导出类型即可,具体修改步骤如下:
1. 修改自定义模板按钮链接
给Template按钮的跳转链接增加template查询参数,和默认导出按钮做区分:
<!-- 把原来的Template按钮改成如下写法 --> <li><a href="/crowdfunding/investment/export/?template=true">Template</a></li>
默认的Export按钮链接保持不变即可。
2. 调整ModelResource逻辑
删除你之前覆写的默认export方法,新增专门导出表头的方法,避免影响默认导出逻辑:
# 你的ModelResource类修改后如下 class InvestmentResource(resources.ModelResource): # 原有其他配置保持不变 # 新增专门导出模板表头的方法,不要覆写默认export def export_template(self, queryset=None, *args, **kwargs): data = super().export(queryset, args, kwargs) return tablib.Dataset(headers=data.headers)
3. 覆写Admin类的导出动作逻辑
在你的InvestmentAdmin(继承ImportExportModelAdmin的管理类)中覆写export_action方法,根据请求参数判断走哪种导出逻辑:
from django.http import HttpResponse from import_export.admin import ImportExportModelAdmin class InvestmentAdmin(ImportExportModelAdmin): # 原有配置(resource_class、list_display等)保持不变 def export_action(self, request, *args, **kwargs): # 校验导出权限,可选但建议加上 if not self.has_export_permission(request): raise PermissionDenied # 判断是否为模板导出请求 if request.GET.get('template') == 'true': resource = self.get_export_resource_class()() # 调用自定义的表头导出方法 dataset = resource.export_template() # 构造导出响应,可根据需要修改文件名和导出格式 response = HttpResponse(dataset.xls, content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename="投资数据导入模板.xls"' return response # 普通导出走默认逻辑 return super().export_action(request, *args, **kwargs)
可选方案:新增专属URL
如果你希望逻辑完全隔离,也可以选择新增专属URL对应模板导出功能,只需要在Admin类中新增get_urls方法绑定自定义导出视图即可,和上面的查询参数方案效果一致。
内容的提问来源于stack exchange,提问作者Prosy A.
相关产品推荐
相关产品推荐

