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

Python django導出excel詳解

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

django restframework 導入excel內容,可以查看另外一篇文章

一、基礎環(huán)境

web架構:前后端分離,前端使用vue,后端使用django 的rest framework

django版本3.2

django-excel 版本0.0.10

djangorestframework版本3.12.4

二、需求

界面導出excel數(shù)據(jù)內容

導入model包含外鍵類型

三、功能實現(xiàn)

1.不使用序列化類:需要手動實現(xià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資產類型"
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="規(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固產"

一、序化類實現(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()
            # 如果有值,表示導出部分,否則導出全部
            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": "導出數(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: 內容列表
    :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

二、手動轉換外鍵實現(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": "導出數(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: 內容列表
    :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,即獲取該對象中外鍵對象數(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
 

總結

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了Python3 基本數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    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

最新評論

乌鲁木齐市| 贵溪市| 怀宁县| 泸水县| 闵行区| 中江县| 城步| 唐河县| 荥经县| 定西市| 淮北市| 云梦县| 凤庆县| 景泰县| 桦甸市| 五常市| 南汇区| 博乐市| 克什克腾旗| 太仆寺旗| 广东省| 寻甸| 玉龙| 无锡市| 扎鲁特旗| 改则县| 宣汉县| 古田县| 屯昌县| 西丰县| 安新县| 滦平县| 临沧市| 察隅县| 元朗区| 阿拉善右旗| 永和县| 平乐县| 石家庄市| 五台县| 临汾市|