基于Django 后台导出Execl

介绍了一个通用的Excel导出功能实现方法,通过Python Django框架下的一个混入类提供批量导出模型实例到Excel文件的能力。该功能支持从模型中获取字段名称及对应的描述,并能够处理模型中的选项字段。
from django.http import HttpResponse
from openpyxl import Workbook


class ExportExcelMixin:
    '''
    通用导出 Excel 文件动作
    '''

    def export_as_excel(self, request, queryset):
        '''
        导出为 excel 文件. 文件名为 app名.模型类名.xlsx.

        :param request:
        :param queryset:
        :return:
        '''
        # 用于定义文件名, 格式为: app名.模型类名
        meta = self.model._meta
        # 模型所有字段名
        field_names = [field.name for field in meta.fields]
        field_verbose_names = [field.verbose_name for field in meta.fields]

        # 定义响应内容类型
        response = HttpResponse(content_type='application/msexcel')
        # 定义响应数据格式
        response['Content-Disposition'] = f'attachment; filename={meta}.xlsx'

        wb = Workbook()
        ws = wb.active
        ws.append(field_verbose_names)

        # 遍历选择的对象列表
        for obj in queryset:
            # 将模型属性值的文本格式组成列表
            data = []
            for field in field_names:

                if hasattr(obj, f'get_{field}_display'):
                    # 可选属性取显示的值
                    value = getattr(obj, f'get_{field}_display')()
                else:
                    value = getattr(obj, field)

                data.append(f'{value}')

            ws.append(data)

        # 将数据存入响应内容
        wb.save(response)

        return response

    # 该动作在 admin 中的显示文字
    export_as_excel.short_description = '导出Excel'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值