在使用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功能过程解析相关推荐

  1. Jquery导出页面表格table的内容为Excel,PDF,DOC格式

    Jquery导出页面表格table的内容为Excel,PDF,DOC格式 文档地址:http://www.jqueryfuns.com/resource/2381 1.引入jquery的js–这里就不 ...

  2. Win10右键菜单栏目中增加新建excel的方法教学

    Win10右键菜单栏目中增加新建excel的方法教学.有用户需要建立excel表格的时候,发现自己的右键菜单栏中没有新建表格的选项.那么我们怎么去将新建excel的功能添加到这个栏目中呢?接下来我们一 ...

  3. 软件测试中性能调优的过程解析

    软件测试中性能调优的过程解析 前言 业界衡量一个软件系统性能的三个指标:TPS(Transactions Per Second),QPS(Query Per Second)以及RT(Response ...

  4. 【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现

    相关信息 (1)建模思路 [2023 年第十三届 MathorCup 高校数学建模挑战赛]A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现 [2023 年第十三届 Matho ...

  5. matlab数据导出excel,matlab数据点导出excel表格-怎样将matlab中数据导出到excel中?...

    怎样将matlab中数据导出到excel中? xlswrite('E:系数.xls',B,'','A2') E:系数.xls 是路径 B是需要导入的矩阵 A2是指矩阵从表格中的A2开始输入 希望可以帮 ...

  6. 如何在MATLAB中把变量填到Word中,matlab数据写入现有excel表格-如何将matlab中变量写入excel...

    如何将matlab 中的数据写入现有的word 表格中? 你可以这样做: (1)先在matlab里面,把相关数据导出.保存成csv格式的文件:比如说,你可以在workspace视图底下,把相关的变量直 ...

  7. 在 Web 应用中增加用户跟踪功能

    http://www.ibm.com/developerworks/cn/web/wa-lo-usertrack/index.html 进行用户跟踪的重要性 随着 Web 应用的复杂化,用户在网站上的 ...

  8. mysql数据导入导出 CSV格式_MySQL中导入导出CSV格式数据

    原标题:MySQL中导入导出CSV格式数据 预备阅读:MySQL中的主键问题和赋权限问题 今天来讲一下在MySQL中导入和导出CSV格式数据的操作. CSV格式数据 逗号分隔值(Comma-Separ ...

  9. vs2008上QT中增加智能提示功能

    转载:http://blog.csdn.net/reille/article/details/6699592 1. 前言 用过VS2008或其它版本的,都知道VS助手即vs assistant,它对于 ...

最新文章

  1. 报表性能优化方案之报表服务器优化基础讲解
  2. Windows 服务器操作系统安全设置加固方法
  3. 一些意想不到的小bug。
  4. AndroidStudio-使用Translations Editor
  5. 【TensorFlow2.0】TensorFlow2.0专栏上线,你来吗?
  6. eureka知识点概览
  7. imu_utils标定imu问题解决
  8. 如何成功搞垮一个团队?
  9. codeforces1451 C. String Equality
  10. HALCON 20.11:深度学习笔记(9)---异常检测
  11. 联想计算机怎样分区,怎么给联想笔记本硬盘分区【图文】
  12. 非常好用的自助建站程序整站源码 内置几十种站
  13. 报名啦!第四届滴滴-IEEE未来精英论坛今夏来袭
  14. 如何做好网站SEO优化,网站SEO关键词优化的5个技巧
  15. Unity模拟经营类游戏Demo部分代码及技术总结
  16. 3种方法: 圆圈中最后剩下的数字
  17. 计算机ctrl加的功能,电脑截图快捷键ctrl加什么键
  18. 双鱼林 android 服务器,双鱼林安卓Android代码生成器下载_双鱼林安卓Android代码生成器官方下载-太平洋下载中心...
  19. 前端实现文件上传(点击+拖拽)
  20. 在线存储 离线存储 近线存储

热门文章

  1. iPhone 14“感叹号”设计没跑:屏下Face ID要等到2024年
  2. iPhone 14系列影像规格曝光:长焦镜头或再度缺席
  3. 超大杯来了!一加10 Ultra将在第三季度登场:或搭载OPPO 自研影像芯片
  4. 疯狂开店! 华为不甘心只卖车 | 次世代车研所
  5. 8月份比亚迪纯电动汽车产销量双双超过3万辆 是去年同期3倍多
  6. 于谦加盟高德地图 推出“哪儿都熟”相声导航
  7. 携程集团CMO孙波入选“2021亚太营销领袖50强”榜单
  8. 苹果新iPad Pro代工订单或将推升富士康4月份营收
  9. 9月安卓机性能榜单公布:华为未进前十,第一名有点意外
  10. B站签约冯提莫,能否靠直播业务实现年入一百亿目标?