Django 后台admin管理页面添加简易导出/下载数据功能的两种方法
在Django中有时候需要在后台界面需要用到导出数据的功能,对于功能要求比较高的可以直接使用Import_Export库来完成。但是对于一些简单的数据导出,可以直接自定义一些简单的函数来实现导出数据。
经过测试,有以下两种方法可以使用:HttpResponse 和 FileResponse 两种方法。
一、HttpResponse:
首先引入 from django.http import HttpResponse
添加导出动作:
actions = ['export_excel']
完整代码1:
# 导出数据到EXCEL文件def export_excel(self, request, queryset):meta = self.model._meta# field_names = [field.name for field in meta.fields]# 如果直接按照数据库字段进行导出,直接使用上面的代码,如果需要进行部分字段的筛选,同时为导出的文件添加中文表头,可以使用下面的代码cn_name = ['区域', 'A库存数','A库存金额', 'B库存数', 'B库存金额', 'C库存数', 'C库存金额', '库存日期', '备注信息']field_names = ['quyu', 'Akcs', 'Akcj', 'Bkcs', 'Bkcj', 'Ckcs','Ckcj','kc_date', 'note']today_time = time.strftime('%Y%m%d%H%M%S', time.localtime()) filename = f'{str(meta)[7:]}' + '_' + f'{today_time}'response = HttpResponse(content_type='application/msexcel')response['Content-Disposition'] = f'attachment; filename={filename}.xlsx'wb = Workbook()ws = wb.active# ws.append(field_names)ws.append(cn_name) # 写入中文表头for obj in queryset:for field in field_names:data = [f'{getattr(obj, field)}' for field in field_names]row = ws.append(data)wb.save(response)self.message_user(request, f"{request.user.username}导出库存数据<{filename}.xlsx>")return responseexport_excel.short_description = '下载数据'export_excel.type = 'info'export_excel.confirm = '确认即将开始导出差异数据!'
相关说明:
1、field_names = [field.name for field in meta.fields];
field_names 如果使用这个代码,是直接使用的数据库的全部字段;
field_names = [ ] 这个是在全部字段的基础上进行的筛选,只保留部分需要导出的字段,可以减小导出数据的体积;
2、表头的写入:
ws.append(field_names) —— 这行代码值直接写入数据库字段定义的名称作为表头;虽然非中文不利于阅读,但是这种方式生成的文件适合作为数据库导入数据时的模板;
ws.append(cn_name) # 写入中文表头,方便阅读;但不适合作为数据导入模板;
3、filename的定义:
在定义filename的时候,加入了today_time的定义,而且将today_time定义到'%Y%m%d%H%M%S',是方便区分文件,便面固定文件名称在第二次导出的时候造成文件覆盖;同时还可以作为时间戳标记;
二、FileResponse:
首先导入:from django.http import FileResponse
添加动作:actions = ['export_excel','export_csv']
完整代码2:
def export_csv(self, request, queryset):today_time = time.strftime('%Y%m%d%H%M%S', time.localtime()) filename = '/logs/' + 'myform_' + f'{today_time}.csv'ids = list(queryset.values_list('quyu', 'wxkcs', 'wxkcj', 'dlkcs', 'dlkcj', 'zykcs','zykcj','note'))print(ids,type(ids))biaotou = '区域,A库存数,A库存金额,B库存数,B库存金额,C数量,C金额,备注\n' with open(filename, 'a+') as f:f.write(biaotou) for i in ids:f.write(str(i)[1:-3]+'\n') newname = f'kucun' + '_' + f'{today_time}.csv'response = FileResponse(open(filename, "rb"))response['Content-Type'] = 'application/octet-stream'response['Content-Disposition'] = f'attachment; filename={newname}'self.message_user(request, f"{request.user.username}导出库存数据<{newname}")return responseexport_csv.short_description = '下载数据CSV'export_csv.type = 'info'export_csv.confirm = '确认即将开始导出差异数据!'
相关说明:
1、导出文件的格式:
格式并不固定,可以是csv\txt\log等多种格式,这里选择csv是因为处理数据比较方便;
2、为什么非要保存为一个独立的文件?
这个地方原本是另外一个很复杂的函数,通过数据整合成为有固定格式的word文档,当然也可以是PDF文档;然后下载的是一个格式排版都比较精美的文档;为了简化代码,使主函数功能更清晰,这里就使用csv文件做简单的说明;
3、表头的汉字说明:
为了能使导出的数据更清晰,便于阅读,特意添加了一行中文的表头;
其他的内容都比较简单、清晰,可以结合第一种方法看一下。
这两种方法都可以实现简单的数据导出、下载功能;各有一定的作用。也可以在下载的同时,将文件同时保存在服务器以便备查;配合一些日志记录。
Django 后台admin管理页面添加简易导出/下载数据功能的两种方法相关推荐
- vue 实现前端excel导出表格携带token的两种方法
场景一:后端返回一个api接口,直接点击按钮就能下载Excel文件时: (1)不需要携带token <!-- 注:excelUrl绑定的是后端返回的api接口 --> <el-lin ...
- 前端从后端导出excel表格文件的两种方法
大部分前端开发人员在做项目的过程中应该都遇到过这个问题: 在前端点击一个导出或者下载的按钮,从后端导出包含列表中的数据的excel文件. 那么如何实现呢? 方法一: 如果项目中没有涉及要要权限验证的问 ...
- 简易的js获取星期几的两种方法
第一种: var a = ["日", "一", "二", "三", "四", "五&quo ...
- ppt模板怎样用到html中,如何添加套用 PPT 模板?教你两种方法
如果你想要提升幻灯片的质量,需要注意的细节有很多,除了进行图文排版,还可以套用PPT模板,这样就不用思考划分标题栏.内容区域,可以节省时间.现在问题来了,如何导入PPT模板?很简单,大家可以试试下面两 ...
- c#+AE将要素类导出为shapefile文件(两种方法)
方法一:使用IFeatureDataConverter.ConvertFeatureClass方法 private int ExportToShapefile(IFeatureClass pFeatu ...
- arcmap shp导出cad无反应_CAD与GIS互转的两种方法
2019年自然资源部18号文的颁布预示着国土空间规划时代的到来,国土空间规划融合了城乡规划.土地利用规划.主体功能区划等空间规划,因此,国土空间规划的编制需要原城乡规划.原土地利用规划等多专业人员的参 ...
- Django后台admin的使用
Django后台admin的使用 1.简述 2.创建数据库表 3.修改admin.py文件 4.启动服务,进入界面 5.自定义表显示内容: 6.自定义动作 1.简述 Django的admin可以提供一 ...
- 解决博易博客后台文章管理页面无法显示分页的问题
升级blogyi2.0以后我发现文章管理页面找不到分页的功能,于是我换了几个浏览器查看了一下,火狐或谷歌浏览器可以看到分页功能的.这很明显是后台css样式的问题.通过谷歌浏览器测试了一下,找到了分页功 ...
- Python全栈(八)Flask项目实战之10.前台发布帖子和后台帖子管理页面搭建
文章目录 一.前台板块页面搭建 二.发布帖子页面搭建 三.前台帖子模型创建 四.文章的发布 1.基本实现 2.项目优化 (1)功能优化--Markdown编辑上传上传本地图片 (2)代码优化--抽离A ...
最新文章
- 动态规划-最优二叉查找树
- 「APIO2018」选圆圈
- python的print换行
- JavaScript对象理解
- python3使用SQLALchemy报错No module named ‘MySQLdb‘
- Rancher添加主机docker命令
- Linux常用命令和服务器配置
- Linux 中 ss 命令的使用实例介绍
- linux目录结构与功能_深入理解linux系统的目录结构(总结的非常详细)
- 为什么数据可视化很重要
- c编程语言学习软件,用什么软件学习c语言
- POJ - 1179
- 21碳纤维山地车哪个牌子好全球最贵辐轮王土拨鼠自行车965万
- 基于计算机显卡的研究
- 64位处理器_为什么苹果A处理器领先安卓2年?从什么时候开始领先的?有何依据...
- 五 IP核行业潜在投资方向和机会
- 内存占用率过高怎么办 一分钟解决
- 11届蓝桥杯青少年组C++全国赛高级组
- benchmark TPC-H postgreSQL
- Redis设计与实现-笔记(一)