最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python django導(dǎo)出excel詳解

 更新時間:2021年11月01日 14:33:42   作者:時光茶居  
這篇文章主要介紹了Python django導(dǎo)出excel的方法 ,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

django restframework 導(dǎo)入excel內(nèi)容,可以查看另外一篇文章

一、基礎(chǔ)環(huán)境

web架構(gòu):前后端分離,前端使用vue,后端使用django 的rest framework

django版本3.2

django-excel 版本0.0.10

djangorestframework版本3.12.4

二、需求

界面導(dǎo)出excel數(shù)據(jù)內(nèi)容

導(dǎo)入model包含外鍵類型

三、功能實現(xiàn)

1.不使用序列化類:需要手動實現(xiàn)外鍵對象轉(zhuǎn)換為外鍵值

2.使用序化類:

四、源碼

#models.py
from django.db import models
from django.utils import timezone
class 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資產(chǎn)類型"
class MyAsset(models.Model):
    ittype = models.ForeignKey(MyITtype, on_delete=models.SET_NULL, verbose_name="產(chǎn)品類型", null=True)
    code = models.CharField(verbose_name="資產(chǎn)編碼", 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="規(guī)格說明", blank=True, default="")
    user = models.CharField(verbose_name="使用人", max_length=128, blank=True, default="")
    status = models.IntegerField(verbose_name="狀態(tài)")
    def __str__(self):
        return self.code
    class Meta:
        db_table = "opGTITAsset"
        verbose_name = "it固產(chǎn)"

一、序化類實現(xiàn)

#asset-export.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.serializers import ModelSerializer
from .models import MyAsset
import django_excel as excel
class 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()
            # 如果有值,表示導(dǎo)出部分,否則導(dǎo)出全部
            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": "導(dǎo)出數(shù)據(jù)出錯"
            }
            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: 內(nèi)容列表
    :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

二、手動轉(zhuǎn)換外鍵實現(xiàn)

#asset-export.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.objializers import ModelSerializer
from .models import MyAsset
import django_excel as excel
class 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": "導(dǎo)出數(shù)據(jù)出錯"
            }
            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: 內(nèi)容列表
    :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),即獲取該對象某個字段內(nèi)容
            if isinstance(value, Model):
                value = eval("".join(["obj." + name + "_id"]))  # 等價于obj.name_id,即獲取該對象中外鍵對象數(shù)值
            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
 

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 基于python監(jiān)控程序是否關(guān)閉

    基于python監(jiān)控程序是否關(guān)閉

    這篇文章主要介紹了基于python監(jiān)控程序是否關(guān)閉,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Python獲取用戶輸入的方法詳解

    Python獲取用戶輸入的方法詳解

    在Python中,獲取用戶輸入是一個基礎(chǔ)且常見的操作,它允許程序與用戶進行交互,Python通過內(nèi)置的input()函數(shù)來實現(xiàn)這一功能,以下將詳細探討如何在Python中獲取用戶輸入,并涵蓋多個方面,需要的朋友可以參考下
    2024-09-09
  • Python中List.count()方法的使用教程

    Python中List.count()方法的使用教程

    這篇文章主要介紹了Python中List.count()方法的使用教程,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • 使用Numpy讀取CSV文件,并進行行列刪除的操作方法

    使用Numpy讀取CSV文件,并進行行列刪除的操作方法

    今天小編就為大家分享一篇使用Numpy讀取CSV文件,并進行行列刪除的操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • python中Scikit-learn庫的高級特性和實踐分享

    python中Scikit-learn庫的高級特性和實踐分享

    Scikit-learn是一個廣受歡迎的Python庫,它用于解決許多機器學(xué)習(xí)的問題,在本篇文章中,我們將進一步探索Scikit-learn的高級特性和最佳實踐,需要的朋友可以參考下
    2023-07-07
  • Python登錄QQ郵箱發(fā)送郵件的實現(xiàn)示例

    Python登錄QQ郵箱發(fā)送郵件的實現(xiàn)示例

    本文主要介紹了Python登錄QQ郵箱發(fā)送郵件的實現(xiàn)示例,主要就是三步,登錄郵件、寫郵件內(nèi)容、發(fā)送,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2023-08-08
  • 詳解Python3 基本數(shù)據(jù)類型

    詳解Python3 基本數(shù)據(jù)類型

    這篇文章主要介紹了Python3 基本數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python操作MySQL數(shù)據(jù)庫的方法

    Python操作MySQL數(shù)據(jù)庫的方法

    pymsql是Python中操作MySQL的模塊,其使用方法和MySQLdb幾乎相同。接下來通過本文給大家介紹Python操作MySQL數(shù)據(jù)庫的方法,感興趣的朋友一起看看吧
    2018-06-06
  • 使用python 獲取進程pid號的方法

    使用python 獲取進程pid號的方法

    這篇文章主要介紹了使用python 獲取進程pid號的方法,需要的朋友可以參考下
    2014-03-03
  • python實現(xiàn)決策樹分類算法

    python實現(xiàn)決策樹分類算法

    這篇文章主要為大家詳細介紹了python實現(xiàn)決策樹分類算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評論

商河县| 汨罗市| 扎囊县| 邵阳县| 渝北区| 绩溪县| 茶陵县| 绍兴县| 稷山县| 临漳县| 扎囊县| 镇江市| 天柱县| 河间市| 营口市| 巴中市| 嘉义县| 朝阳县| 布尔津县| 临猗县| 常山县| 三穗县| 罗江县| 青海省| 阜城县| 英超| 呼和浩特市| 察隅县| 乌拉特中旗| 清远市| 那坡县| 鹤岗市| 汽车| 新闻| 深水埗区| 孙吴县| 伊吾县| 郑州市| 普兰店市| 休宁县| 喜德县|