Python django导出excel的方法是什么
发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,这篇文章主要讲解了"Python django导出excel的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python django导出e
千家信息网最后更新 2025年02月19日Python django导出excel的方法是什么
这篇文章主要讲解了"Python django导出excel的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python django导出excel的方法是什么"吧!
一、基础环境
web架构:前后端分离,前端使用vue,后端使用django 的rest framework
django版本3.2
django-excel 版本0.0.10
djangorestframework版本3.12.4
二、需求
界面导出excel数据内容
导入model包含外键类型
三、功能实现
1.不使用序列化类:需要手动实现外键对象转换为外键值
2.使用序化类:
四、源码
#models.pyfrom django.db import modelsfrom django.utils import timezoneclass MyITtype(models.Model): name = models.CharField(verbose_name="名称", max_length=128, unique=True) ittype = models.SmallIntegerField(verbose_name="类型") comment = models.TextField(verbose_name="备注", blank=True, default="") def __str__(self): return self.name class Meta: db_table = "MyITtype" verbose_name = "it资产类型"class MyAsset(models.Model): ittype = models.ForeignKey(MyITtype, on_delete=models.SET_NULL, verbose_name="产品类型", null=True) code = models.CharField(verbose_name="资产编码", max_length=128, unique=True) buytime = models.DateField(verbose_name="入仓时间", default=timezone.now) usetime = models.DateField(verbose_name="分配时间", default=timezone.now) comment = models.TextField(verbose_name="规格说明", blank=True, default="") user = models.CharField(verbose_name="使用人", max_length=128, blank=True, default="") status = models.IntegerField(verbose_name="状态") def __str__(self): return self.code class Meta: db_table = "opGTITAsset" verbose_name = "it固产"
一、序化类实现
#asset-export.pyfrom rest_framework.views import APIViewfrom rest_framework.response import Responsefrom rest_framework.serializers import ModelSerializerfrom .models import MyAssetimport django_excel as excelclass ITAssetSer(ModelSerializer): class Meta: model = MyAsset fields = '__all__'class ITAssetExport(APIView): """""" use_model = MyAsset queryset = use_model.objects.all() serializer_class = ITAssetSer def post(self, request, *args, **kwargs): try: data = request.data id_list = data.get("data") obj_list = self.queryset.all() # 如果有值,表示导出部分,否则导出全部 if id_list: obj_list = obj_list.filter(id__in=id_list) ser = self.serializer_class(instance=obj_list, many=True) return MakeExcel(obj_list=ser.data, class_name=self.use_model, filename="itasset") except: ret = { "code": 599, "message": "导出数据出错" } return Response(ret) def get(self, request, *args, **kwargs): self.http_method_not_allowed(request, *args, **kwargs)def MakeExcel(obj_list, class_name, filename): """ 制作excel表 :param ser_list: 内容列表 :param class_name: 类名 :param filename: 文件名 :return: """ meta_fields = class_name._meta.fields name_list = [field.name for field in meta_fields] header_list = [field.verbose_name for field in meta_fields] wdata = [header_list] for obj in obj_list: data = [obj[name] for name in name_list] wdata.append(data) sheet = excel.pe.Sheet(wdata) response = excel.make_response(pyexcel_instance=sheet, file_name=filename, file_type="xlsx") return response
二、手动转换外键实现
#asset-export.pyfrom rest_framework.views import APIViewfrom rest_framework.response import Responsefrom rest_framework.objializers import ModelSerializerfrom .models import MyAssetimport django_excel as excelclass ITAssetSer(ModelSerializer): class Meta: model = MyAsset fields = '__all__'class ITAssetExport(APIView): """""" use_model = MyAsset queryset = use_model.objects.all() objializer_class = ITAssetSer def post(self, request, *args, **kwargs): try: obj_list = self.use_model.objects.all() return MakeExcel(obj_list=obj_list, class_name=self.use_model, filename="itasset") except: ret = { "code": 599, "message": "导出数据出错" } return Response(ret) def get(self, request, *args, **kwargs): self.http_method_not_allowed(request, *args, **kwargs)def MakeExcel(obj_list, class_name, filename): """ 制作excel表 :param obj_list: 内容列表 :param class_name: 类名 :param filename: 文件名 :return: """ meta_fields = class_name._meta.fields name_list = [field.name for field in meta_fields] header_list = [field.verbose_name for field in meta_fields] wdata = [header_list] for obj in obj_list: data = [] for name in name_list: value = eval("obj." + name) # 等价于getattr(obj,name),即获取该对象某个字段内容 if isinstance(value, Model): value = eval("".join(["obj." + name + "_id"])) # 等价于obj.name_id,即获取该对象中外键对象数值 data.append(value) # 参考例子 # data = [getattr(obj, name) if name != "ittype" else obj.ittype_id for name in name_list] wdata.append(data) sheet = excel.pe.Sheet(wdata) response = excel.make_response(pyexcel_instance=sheet, file_name=filename, file_type="xlsx") return response
感谢各位的阅读,以上就是"Python django导出excel的方法是什么"的内容了,经过本文的学习后,相信大家对Python django导出excel的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
内容
方法
对象
类型
数据
版本
学习
手动
文件
文件名
时间
等价
类名
资产
制作
使用人
例子
前端
功能
名称
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
改变数据库的逻辑模式
更改登入的域控制器服务器
网络安全和网络文明小论文
武侯区欧之轩软件开发部
厦门车主互联网络科技
手机版我的世界战墙服务器
网络安全面临哪些威胁
古冶区媒体网络技术不二之选
腾讯服务器流量超了扣款吗
定制数据库软件吗
es数据库备份
释然的服务器
orcal 数据库下载
国家怎么监控网络安全
谭建炜软件开发
网络安全隐患岗位
互联网科技公司绘图用什么软件
筑牢网络安全防线板报
数据库技术发展需要什么条件
中国互联网科技产品
软件开发的文档要求
win7能当服务器吗
长城网际 网络安全
面试一家软件开发公司要培训
苏州濯宽互联网科技有限公司
网络安全a3纸画
网络安全问题严峻
想搞软件开发怎么学
长春市天气预报软件开发
烟台云搜网络技术有限公司