Admin actionsを使う3 - Excel出力編

前提

  1. Django 1.1以降がインストールされていること。
  2. xlwtがインストールされていること。

仕様

  1. 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を修正せずに導入できるという利点もあります。

twitter 2009-08-11 17:10:47.613776

関連ページ

参照サイト

Recent Updates

URLConf Tip 01 - キャプチャの有無にかかわらず同一のviewで処理する
Markdownの入力補助"wmd"をAdmin siteで使う
ModelFormでfieldのwidgetを変更する
動的なformを作る 6 - Dynamic Inline Admin site編
Formsetsを使う3 - inlineformset_factory編
動的なformを作る 5 - django-dynamic-formset編
Formクラスからメディアを定義する
複数のmodelを結合する 2 - Proxy model編
複数のmodelを結合する 1
ModelFormでfieldの表示順番を変える
Admin siteのwidgetを個別に変更する
formfield_overridesを使ってAdmin siteのwidgetを変更する
Admin siteのlist_displayをカスタマイズする - リンク編
Admin siteのlist_displayをカスタマイズする - 基本編
Admin siteのTextareaの高さを自在に変更する - admin.py編