千家信息网

Python django导出excel的方法是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要讲解了"Python django导出excel的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python django导出e
千家信息网最后更新 2026年11月03日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安全错误 数据库的锁怎样保障安全 互联网金融科技 云信互联网科技有限公司 科技股互联网 上海挚品互联网科技 卓越科技(互联网 ) 九亚互联网科技 广州互联网络科技有限公司 广西互联网科技公司 哈尔滨新华互联网科技 四个字互联网科技公司取名 互联网之后的科技是什么 重庆威客帮互联网科技 受益于互联网科技的高速发展 世界互联网科技公司市值排名 锡山区互联网智能科技产品供应 云南省自由互联网科技有限公司 宇信科技在杭州互联网排第几 互联网金融运营模式中的金融科技 互联网科技手抄报图片 互联网科技创业计划的风险分析 中国互联网科技工作委员会毛军 互联网核心科技是什么 伴你行互联网科技有限公司 开启互联网科技时代小说 中国科技互联网公司收入 彤创互联网科技有限公司 互联网保险科技创业 从那以后互联网科技有限公司 下一代互联网重大应用科技园 数字互联网科技有限公司
0