Admin actionsを使う3 - Excel出力編
前提
- Django 1.1以降がインストールされていること。
- xlwtがインストールされていること。
仕様
- Admin actionsの機能を使い、任意のデータをExcelファイルに出力。
admin actionsの作成
出力したいModelAdminのサブクラスに処理を追加します。
admin.py
from django.contrib import admin
from appname.models import Example
import xlwt
import os
from django.Http import HttpResponse
class ExampleAdmin(admin.ModelAdmin):
…
actions = ['export_to_excel']
def export_to_excel(self, request, queryset):
wb = xlwt.Workbook()
ws = wb.add_sheet(unicode(Example._meta.verbose_name_plural))
for i, f in enumerate(Example._meta.fields):
ws.write(0, i, f.name)
qs = queryset
for ri, row in enumerate(qs):
for ci, cf in enumerate(Example._meta.fields):
ws.write(ri+1, ci, unicode(getattr(row, cf.name)))
fd, fn = tempfile.mkstemp()
os.close(fd)
wb.save(fn)
fh = open(fn, 'rb')
resp = fh.read()
fh.close()
response = HttpResponse(resp, mimetype = 'application/ms-excel')
response['Content-Disposition']='attachment; filename = %s.xls' % \
(unicode(Post._meta.verbose_name_plural))
return response
export_to_excel.shortdescription = 'To Excel file'
admin.site.register(Example, ExampleAdmin)
これを利用すれば必要な顧客データを出力し、宛名ソフトとの連携などができるようになります。
さらに、Admin siteからExcel形式でmodelのデータを出力する汎用モジュールのようにtemplateやurls.pyを修正せずに導入できるという利点もあります。