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)