天天看點

【django】 django背景管理 導出excel表

from django.contrib import admin

# Register your models here.
import xlwt
from django.http import HttpResponse

from dal import models
# Register your models here.

from openpyxl import Workbook


class FundAdmin(admin.ModelAdmin):
    actions = ["export_as_excel"]
    list_display = ('title', 'name','type','unit','status','create_time')
    list_filter = ['title', 'name','type','unit','status','create_time',]


    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(models.Fund, FundAdmin)