3、DjangoAdmin导出excel和csv文件

一、导出Excel

1、安装openpyxl库

2、admin文件

# 导入openpyxl库中的Workbook类,用于创建Excel文件  
from openpyxl import Workbook  
# 导入Django的admin模块,用于在Django admin后台注册和管理模型  
from django.contrib import admin  
# 导入HttpResponse类,用于生成HTTP响应  
from django.http import HttpResponse  
# 假设这是从某个应用的models.py文件中导入的PrettyNum模型  
from .models import Category  # 定义一个名为ExportExcelMixin的混合类(Mixin),用于添加导出Excel的功能  
class ExportExcelMixin(object):  # 定义一个方法export_as_excel,用于将查询集(queryset)导出为Excel文件  def export_as_excel(self, request, queryset):  # 获取当前模型的元数据对象  meta = self.model._meta  # 从元数据对象中提取所有字段的名称  field_names = [field.name for field in meta.fields]  # 创建一个HttpResponse对象,设置内容类型为Excel文件  response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')  # 设置响应的Content-Disposition头部,指定文件名为模型名加.xlsx后缀  response['Content-Disposition'] = f'attachment; filename={meta.model_name}.xlsx'  # 创建一个Workbook对象,即一个Excel工作簿  wb = Workbook()  # 激活工作簿中的第一个工作表  ws = wb.active  # 将字段名称作为第一行写入工作表  ws.append(field_names)  # 遍历查询集中的每个对象  for obj in queryset:  # 对于每个对象,提取其字段值,并将它们作为一行数据写入工作表  row_data = [getattr(obj, field) for field in field_names]  ws.append(row_data)  # 将工作簿保存到HttpResponse对象中,以便作为文件下载  wb.save(response)  # 返回包含Excel文件的HttpResponse对象  return response  # 为export_as_excel方法设置简短描述,以便在Django admin后台显示  export_as_excel.short_description = '导出Excel'  # 使用admin.register装饰器注册PrettyNum模型到Django admin后台  
# 同时,通过继承ExportExcelMixin混合类,为PrettyNumAdmin类添加导出Excel的功能  
@admin.register(Category)  
class PrettyNumAdmin(admin.ModelAdmin, ExportExcelMixin):  # 定义在Django admin后台表单中显示的字段  fields = ('name', )  # 定义在Django admin后台列表视图中显示的字段  list_display = ('name', )  # 定义在Django admin后台列表视图中可用的过滤器  list_filter = ('name', )   # 定义在Django admin后台搜索栏中可搜索的字段  search_fields = ('name', )   # 将export_as_excel方法添加到actions列表中,以便在Django admin后台作为操作选项显示  actions = ['export_as_excel']

ExportExcelMixin类为excel的导出类可直接复制,带装饰器的类,修改类参数,修改字段。

二、导出csv

导出类似,与导出excel代码合并如下

from django.contrib import admin  
from django.http import HttpResponse  
from django.urls import reverse  
from urllib.parse import quote  
from openpyxl import Workbook  
import csv  
from .models import Category  class ExportExcelMixin:  def export_as_excel(self, request, queryset):  # 获取当前模型的元数据对象  meta = self.model._meta  # 从元数据对象中提取所有字段的名称  field_names = [field.name for field in meta.fields]  # 创建一个HttpResponse对象,设置内容类型为Excel文件  response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')  # 设置响应的Content-Disposition头部,指定文件名为模型名加.xlsx后缀  response['Content-Disposition'] = f'attachment; filename={meta.model_name}.xlsx'  # 创建一个Workbook对象,即一个Excel工作簿  wb = Workbook()  # 激活工作簿中的第一个工作表  ws = wb.active  # 将字段名称作为第一行写入工作表  ws.append(field_names)  # 遍历查询集中的每个对象  for obj in queryset:  # 对于每个对象,提取其字段值,并将它们作为一行数据写入工作表  row_data = [getattr(obj, field) for field in field_names]  ws.append(row_data)  # 将工作簿保存到HttpResponse对象中,以便作为文件下载  wb.save(response)  # 返回包含Excel文件的HttpResponse对象  return response  export_as_excel.short_description = '导出Excel'  class ExportCsvMixin:  def export_as_csv(self, request, queryset):  meta = self.model._meta  field_names = [field.name for field in meta.fields]  filename = f"{meta.verbose_name_plural}.csv"  filename_quoted = quote(filename)  response = HttpResponse(content_type='text/csv; charset=utf-8')  response['Content-Disposition'] = f'attachment; filename="{filename_quoted}"'  writer = csv.writer(response)  writer.writerow(field_names)  for obj in queryset:  row_data = [getattr(obj, field) for field in field_names]  writer.writerow(row_data)  return response  export_as_csv.short_description = '导出CSV'  @admin.register(Category)  
class CategoryAdmin(admin.ModelAdmin, ExportExcelMixin, ExportCsvMixin):  fields = ('name',)  list_display = ('name',)  list_filter = ('name',)  search_fields = ('name',)  actions = ['export_as_excel', 'export_as_csv']  

写导出excel和导出csv文件的两个类,写一个导出字段的类引入以上两个类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025中国(西安)国际军民两用新材料展览会

时 间:2025年3月14-16日 地 点:西安国际会展中心 ◆展会背景Exhibition background: 随着科技的飞速发展,新材料在军事领域的应用逐渐凸显出…

EDIUS X 10.34.9631 视频剪辑软件 下载 包含安装说明

下载地址(资源制作整理不易,下载使用需付费,不能接受请勿浪费时间下载) 链接:https://pan.baidu.com/s/1P2wKxVcSx5WzAtHXCaAp5A?pwd227i 提取码:227i

ant design vue+vue3+ts实现一天内按钮只能点击2次,并置灰,且过当天0点时需复原~

1、需求:在主页面中点击新增按钮,弹出弹窗,此时弹窗中有一个确定按钮,需实现该确定按钮在当天0点前指点点击2次,超过2次置灰,过了零点复原。 思路:首先弹窗通过v-if显示与隐藏弹窗子组件&#…

【Linux网络】应用层协议HTTP(1)

🎉博主首页: 有趣的中国人 🎉专栏首页: Linux网络 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好,本片文章将会讲解 应用层协议HTTP 的相关内容。 如果看到最后您觉得这篇文章写得…

OCI编程高级篇(十八) OCI连接池概念

数据库连接池已经不是新概念了,它以有限的连接让外部更多的客户来访问数据库,一般用于中间服务器中,OCI也有连接池的概念。OCI的连接池是由OCI自己管理的,不需要应用干预,程序通过函数从连接池中得到一个会话&#xff…

【Android】 工具篇:ProxyPin抓包详解---夜神模拟器

1️⃣ProxyPin介绍 ProxyPin是一种基于MITM(中间人攻击)的抓包工具,主要用于移动应用程序的安全测试和调试。下面是关于ProxyPin的详解。 2️⃣ 安裝和使用 安裝 下载地址 https://gitee.com/wanghongenpin/network-proxy-flutter/releases 直接拖入模拟器就可以了,打开…

github源码指引:共享内存、数据结构与算法:字符串池StringPool

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 专题:共享内存、数…

5. MyBatis 如何实现数据库类型和 Java 类型的转换的?

MyBatis 在处理数据库查询结果或传递参数时,需要将数据库类型与 Java 类型之间进行转换。MyBatis 提供了多种方式来实现这种类型转换,主要通过内置的 TypeHandler(类型处理器)机制。 1. TypeHandler 的作用 TypeHandler 是 MyBat…

C++ STL 之哈希 map unordered_map

一. 概述 在C中,unordered_map 是一个关联容器,是一种基于哈希表的键值对容器,它存储了键值对(key-value),其中每个键(key)都是唯一的。 二. map & unordered_map的区别 map内…

rqueue使用笔记

文章目录 maven依赖引入监听器注入和发送消息接收消息属性配置 项目用到rqueue&#xff0c;虽然知道和redis相关&#xff0c;但是肯定有不一样的地方&#xff0c;做个笔记。 maven依赖 网上找个能用的版本就行&#xff0c;如&#xff1a; <dependency><groupId>c…

「深入理解」HTML Meta标签:网页元信息的配置

「深入理解」HTML Meta标签&#xff1a;网页元信息的配置 HTML的<meta>元素用于提供关于HTML文档的元数据&#xff08;metadata&#xff09;&#xff0c;这些信息对于浏览器和其他处理HTML文档的应用程序来说是非常有用的&#xff0c;如&#xff1a;<base>、<li…

【网络安全】服务基础第一阶段——第九节:Windows系统管理基础---- Windows_AD域

目录 一、域与活动目录 1.1 工作组 1.2 域 1.2.1 域&#xff08;Domain&#xff09; 1.2.2 域控制器&#xff08;Domain Controller&#xff0c;DC&#xff09; 1.2.3 功能和角色 1.2.4 管理和监控 1.2 5 域结构 1.3 组织单元&#xff08;Organizational Unit&#xff…

集成电路学习:什么是IP知识产权

一、IP&#xff1a;知识产权 IP是Intellectual Property的缩写&#xff0c;即知识产权。知识产权是一种无形的财产权&#xff0c;也称智力成果权&#xff0c;它指的是通过智力创造性劳动所获得的成果&#xff0c;并且是由智力劳动者对成果依法享有的专有权利。这种权利包括人身…

性能优化:自动化处理系统设计

性能优化&#xff1a;自动化处理系统设计 前言需求分析系统设计1. 调度中心2. 任务执行器3. 错误处理机制4. 通知系统5. 报表生成器6. 日志记录器 技术实现结语 前言 在当今这个信息爆炸、技术日新月异的时代&#xff0c;企业面临着前所未有的挑战和机遇。随着业务量的不断增长…

基于Yolov5_6.1、LPRNet、PySide6开发的车牌识别系统

项目概述 项目背景 随着车辆数量的不断增加&#xff0c;车牌识别系统在交通管理、停车场自动化等领域变得越来越重要。本项目利用先进的深度学习技术和现代图形用户界面框架来实现高效的车牌识别功能。 项目特点 高效识别&#xff1a;采用 YOLOv5_6.1 进行车牌定位&#xff…

差分传输与单端传输

差分与单端传输 本页讨论模拟信号传输中的两个概念&#xff1a;“单端”和“差分”。模拟信号用于将模拟仪器的输出传送到数字转换器。虽然数字信号对干扰的容忍度相对较高&#xff0c;但模拟信号却可能受到环境中电磁波的干扰和改变。本文档将解释这一问题&#xff0c;并描述…

React 入门第九天:与后端API的集成与数据管理

在React学习的第九天&#xff0c;我集中学习了如何与后端API进行集成。这一步是将静态的React应用转变为动态、可交互的关键。通过与后端通信&#xff0c;我们可以从服务器获取数据、发送用户输入以及处理复杂的业务逻辑。 1. 使用fetch进行数据请求 React没有内置的HTTP库&a…

Assembly 跨域通信AppDomain

Assembly 怎么实现跨域通信 在 .NET Framework 中&#xff0c;AppDomain 是一种用于隔离应用程序的机制&#xff0c;可以在单个进程内创建多个应用程序域&#xff08;AppDomain&#xff09;。每个应用程序域都有自己的程序集、资源和内存空间。通过使用 AppDomain&#xff0c;…

Linux 搭建 Java 部署环境:安装 JDK 和 MySQL 的教程

目录 一、apt 二、JDK 2.1 更新软件包 2.2 安装openjdk 三、MySQL 3.1 使用apt安装MySQL 3.2 查看MySQL的状态 3.3 MySQL 安装安全设置 3.4 设置密码 一、apt apt(Advanced Packaging Tool), Linux软件包管理工具&#xff0c;用于在Ubuntu、Debian和相关Linux发行版上…

OcrLiteNcnn:Windows环境打包及Java调用

目录结构 前言cmake安装源码下载说明Windows源码编译执行“cmake -DCMAKE_BUILD_TYPE=Release ..”执行“cmake --build . --config Release -- -m:6”编译完成识别图片命令行调用Java调用前言 Java实现OCR识别图片中的文字,小编先前整理过一篇在Linux环境中基于“ChineseOcr…