django excel 导出页面_Django Admin中增加导出Excel功能过程解析
在使用Django Admin时, 对于列表我们有时需要提供数据导出功能, 如下图:
增加导出Excel功能
在Django Admin中每个模型的Admin类(继承至admin.ModelAdmin), 我们可以通过actions增加支持的动作, 值为当前类存在的方法名, 例如:
.......
@admin.register(Issue)
class IssueAdmin(admin.ModelAdmin):
......
actions = ['export_as_excel'] # 增加动作, 对应相应的方法名
def export_as_csv(self, request, queryset): # 具体的导出csv方法的实现
pass
export_as_excel.short_description = '导出Excel' # 该动作在admin中的显示文字
导出Excel方法详细实现如下:
from openpyxl import Workbook
....
def export_as_excel(self, request, queryset):
meta = self.model._meta # 用于定义文件名, 格式为: app名.模型类名
field_names = [field.name for field in meta.fields] # 模型所有字段名
response = HttpResponse(content_type='application/msexcel') # 定义响应内容类型
response['Content-Disposition'] = f'attachment; filename={meta}.xlsx' # 定义响应数据格式
wb = Workbook() # 新建Workbook
ws = wb.active # 使用当前活动的Sheet表
ws.append(field_names) # 将模型字段名作为标题写入第一行
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) # 将数据存入响应内容
return response
由于导出Excel动作可以作为各个模型的通用动作, 我们可以封装成一个Mixin类使用, 完整代码如下:
from openpyxl import Workbook
from django.contrib import admin
from django.http import HttpResponse
from .models import Issue
class ExportExcelMixin(object):
def export_as_excel(self, request, queryset):
meta = self.model._meta
field_names = [field.name for field in meta.fields]
response = HttpResponse(content_type='application/msexcel')
response['Content-Disposition'] = f'attachment; filename={meta}.xlsx'
wb = Workbook()
ws = wb.active
ws.append(field_names)
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)
return response
export_as_excel.short_description = '导出Excel'
@admin.register(Issue)
class IssueAdmin(admin.ModelAdmin, ExportCsvMixin):
fields = ('key', 'summary', 'status', 'project',
'origin', 'components', 'prj_level', 'prj_category',
'assignee', 'origin_person', 'pm', 'dev_manager', 'test_manager', 'tester', 'fe_dev', 'backend_dev',
'plan_begin', 'plan_end', 'fe_plan_begin', 'fe_plan_end', 'test_plan_begin',
'test_plan_end', 'backend_plan_begin', 'backend_plan_end',
'created', 'reopen', 'prd_begin', 'prd_end', 'dev_begin', 'dev_end',
'test_begin', 'test_end', 'pm_check', 'ready', 'pause', 'done',
'pm_take', 'dev_take', 'test_take', 'total_take',
'tags',
)
readonly_fields = fields
list_display = ('key', 'summary', 'status', 'origin', 'components', 'created', 'visit')
list_filter = ('origin', 'components', 'status', 'tags')
search_fields = ('key', 'summary')
date_hierarchy = 'created'
actions = ['export_as_excel']
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:django框架基于模板 生成 excel(xls) 文件操作示例
django admin后台添加导出excel功能示例代码
django使用xlwt导出excel文件实例代码
Django 导出 Excel 代码的实例详解
利用django如何解析用户上传的excel文件
Python GAE、Django导出Excel的方法
django excel 导出页面_Django Admin中增加导出Excel功能过程解析相关推荐
- Jquery导出页面表格table的内容为Excel,PDF,DOC格式
Jquery导出页面表格table的内容为Excel,PDF,DOC格式 文档地址:http://www.jqueryfuns.com/resource/2381 1.引入jquery的js–这里就不 ...
- Win10右键菜单栏目中增加新建excel的方法教学
Win10右键菜单栏目中增加新建excel的方法教学.有用户需要建立excel表格的时候,发现自己的右键菜单栏中没有新建表格的选项.那么我们怎么去将新建excel的功能添加到这个栏目中呢?接下来我们一 ...
- 软件测试中性能调优的过程解析
软件测试中性能调优的过程解析 前言 业界衡量一个软件系统性能的三个指标:TPS(Transactions Per Second),QPS(Query Per Second)以及RT(Response ...
- 【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现
相关信息 (1)建模思路 [2023 年第十三届 MathorCup 高校数学建模挑战赛]A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现 [2023 年第十三届 Matho ...
- matlab数据导出excel,matlab数据点导出excel表格-怎样将matlab中数据导出到excel中?...
怎样将matlab中数据导出到excel中? xlswrite('E:系数.xls',B,'','A2') E:系数.xls 是路径 B是需要导入的矩阵 A2是指矩阵从表格中的A2开始输入 希望可以帮 ...
- 如何在MATLAB中把变量填到Word中,matlab数据写入现有excel表格-如何将matlab中变量写入excel...
如何将matlab 中的数据写入现有的word 表格中? 你可以这样做: (1)先在matlab里面,把相关数据导出.保存成csv格式的文件:比如说,你可以在workspace视图底下,把相关的变量直 ...
- 在 Web 应用中增加用户跟踪功能
http://www.ibm.com/developerworks/cn/web/wa-lo-usertrack/index.html 进行用户跟踪的重要性 随着 Web 应用的复杂化,用户在网站上的 ...
- mysql数据导入导出 CSV格式_MySQL中导入导出CSV格式数据
原标题:MySQL中导入导出CSV格式数据 预备阅读:MySQL中的主键问题和赋权限问题 今天来讲一下在MySQL中导入和导出CSV格式数据的操作. CSV格式数据 逗号分隔值(Comma-Separ ...
- vs2008上QT中增加智能提示功能
转载:http://blog.csdn.net/reille/article/details/6699592 1. 前言 用过VS2008或其它版本的,都知道VS助手即vs assistant,它对于 ...
最新文章
- 报表性能优化方案之报表服务器优化基础讲解
- Windows 服务器操作系统安全设置加固方法
- 一些意想不到的小bug。
- AndroidStudio-使用Translations Editor
- 【TensorFlow2.0】TensorFlow2.0专栏上线,你来吗?
- eureka知识点概览
- imu_utils标定imu问题解决
- 如何成功搞垮一个团队?
- codeforces1451 C. String Equality
- HALCON 20.11:深度学习笔记(9)---异常检测
- 联想计算机怎样分区,怎么给联想笔记本硬盘分区【图文】
- 非常好用的自助建站程序整站源码 内置几十种站
- 报名啦!第四届滴滴-IEEE未来精英论坛今夏来袭
- 如何做好网站SEO优化,网站SEO关键词优化的5个技巧
- Unity模拟经营类游戏Demo部分代码及技术总结
- 3种方法: 圆圈中最后剩下的数字
- 计算机ctrl加的功能,电脑截图快捷键ctrl加什么键
- 双鱼林 android 服务器,双鱼林安卓Android代码生成器下载_双鱼林安卓Android代码生成器官方下载-太平洋下载中心...
- 前端实现文件上传(点击+拖拽)
- 在线存储 离线存储 近线存储
热门文章
- iPhone 14“感叹号”设计没跑:屏下Face ID要等到2024年
- iPhone 14系列影像规格曝光:长焦镜头或再度缺席
- 超大杯来了!一加10 Ultra将在第三季度登场:或搭载OPPO 自研影像芯片
- 疯狂开店! 华为不甘心只卖车 | 次世代车研所
- 8月份比亚迪纯电动汽车产销量双双超过3万辆 是去年同期3倍多
- 于谦加盟高德地图 推出“哪儿都熟”相声导航
- 携程集团CMO孙波入选“2021亚太营销领袖50强”榜单
- 苹果新iPad Pro代工订单或将推升富士康4月份营收
- 9月安卓机性能榜单公布:华为未进前十,第一名有点意外
- B站签约冯提莫,能否靠直播业务实现年入一百亿目标?