设置django后台 导出excel表

帮助公司写了一个爬虫,需要将获取的邮箱导出到本地,因为之前接触过xadmin,所以知道可以直接通过后台导出来

1. 安装xlwt 和 openpyxl

pip3 install xlwt
pip3 install openpyxl 

2.修改对应APP的 admin.py

from django.contrib import admin
from .models import Url, Country, KeyWords, Info
import xlwt
from openpyxl import Workbook
from django.http import HttpResponse


class IndoAdmin(admin.ModelAdmin):
    actions = ["export_as_excel"]
    list_per_page = 500

    def export_as_excel(self, request, queryset):
        # print("queryset", queryset)
        meta = self.model._meta  # 用于定义文件名, 格式为: app名.模型类名
        # print("meta", meta)
        field_names = [field.name for field in meta.fields]  # 模型所有字段名

        response = HttpResponse(content_type='application/msexcel')  # 定义响应内容类型
        response['Content-Disposition'] = f'attachment; filename={meta}.xlsx'  # 定义响应数据格式
        wb = Workbook()  # 新建Workbook
        ws = wb.active  # 使用当前活动的Sheet表
        ws.append(field_names)  # 将模型字段名作为标题写入第一行
        for obj in queryset:  # 遍历选择的对象列表
            # print(obj)
            for field in field_names:
                data = [f'{getattr(obj, field)}' for field in field_names]  # 将模型属性值的文本格式组成列表

            ws.append(data)  # 写入模型属性值
        wb.save(response)  # 将数据存入响应内容
        return response

    export_as_excel.short_description = '导出Excel'  # 该动作在admin中的显示文字


admin.site.register(Url)
admin.site.register(Country)
admin.site.register(KeyWords)
admin.site.register(Info, IndoAdmin)

这里添加的主要是这个代码,代码写有注释,很详细

    def export_as_excel(self, request, queryset):
        # print("queryset", queryset)
        meta = self.model._meta  # 用于定义文件名, 格式为: app名.模型类名
        # print("meta", meta)
        field_names = [field.name for field in meta.fields]  # 模型所有字段名

        response = HttpResponse(content_type='application/msexcel')  # 定义响应内容类型
        response['Content-Disposition'] = f'attachment; filename={meta}.xlsx'  # 定义响应数据格式
        wb = Workbook()  # 新建Workbook
        ws = wb.active  # 使用当前活动的Sheet表
        ws.append(field_names)  # 将模型字段名作为标题写入第一行
        for obj in queryset:  # 遍历选择的对象列表
            # print(obj)
            for field in field_names:
                data = [f'{getattr(obj, field)}' for field in field_names]  # 将模型属性值的文本格式组成列表

            ws.append(data)  # 写入模型属性值
        wb.save(response)  # 将数据存入响应内容
        return response

    export_as_excel.short_description = '导出Excel'  # 该动作在admin中的显示文字

参考链接

【django】 django后台管理 导出excel表

猜你喜欢

转载自blog.csdn.net/cll_869241/article/details/118048911