django-import-exportで管理画面にCSVエクスポート機能を追加する

Djangoのadminサイト、調べてみるといろいろプラグインがあるらしい。

管理画面のデータをCSVなどの形式でインポート/エクスポートしたくなったので、
調べてみたらdjango-import-exportで簡単にできた。その時の備忘録。

インストール

まずはpipでインストール

$ pip install django-import-export
設定

import_exportをINSTALLED_APPSに追加

# settings.py
INSTALLED_APPS = (
    ...
    'import_export',
)
admin.pyに追加

対象のデータに対する設定を追加していく。

サンプルのモデルはこんな感じ。

# models.py
class Book(models.Model):
    name = models.CharField('Book name', max_length=100)
    author = models.CharField('Book name', max_length=100)

django-import-exportの設定。

対象とするモデルに対してModelResourceを継承したクラスを追加する。
設定関連はココに書いていくらしい。

# admin.py
from django.contrib import admin
from import_export import resources
from import_export.admin import ImportExportModelAdmin

from .models import Book

class BookResource(resources.ModelResource):
    # Modelに対するdjango-import-exportの設定
    class Meta:
        model = Book


@admin.register(Book)
class BookAdmin(ImportExportModelAdmin):
    # ImportExportModelAdminを利用するようにする
    ordering = ['id']
    list_display = ('id', 'title', 'author')

    # django-import-exportsの設定
    resource_class = BookResource

最後に、ImportExportModelAdminを継承したAdminクラスを用意して、
resource_classにModelResourceを継承したクラスを設定すればOK!

すると、こんな感じにボタンが表示される。簡単(´ω`)

スクリーンショット 2019-11-27 13.38.26.png

小ネタ

Exportだけにする: Importを無効化

インポートは別にいらないなと思ったので、無効化してみた。
ExportMixinだけにするといいらしい。

# ... 略
from import_export.admin import ExportMixin

@admin.register(Book)
class BookAdmin(ExportMixin, admin.ModelAdmin):
    # ExportMixinをadmin.ModelAdminに追加すればOK
    ordering = ['id']
    list_display = ('id', 'title', 'author')

    # django-import-exportsの設定
    resource_class = BookResource
Exportできるフォーマットを指定する

デフォルトだとJSONとかYMLとかいろいろ選べるけどCSVだけでいいので、
選択できる部分を絞ってみた。formatsを指定すればOK

# ... 略
from import_export.formats import base_formats

@admin.register(Book)
class BookAdmin(ImportExportModelAdmin):
    ordering = ['id']
    list_display = ('id', 'title', 'author')

    # django-import-exportsの設定
    resource_class = BookResource
    formats = [base_formats.CSV] # formatsで指定できる

以上!!

こんなのつくってます!!

積読用の読書管理アプリ 『積読ハウマッチ』をリリースしました!
積読ハウマッチは、Nuxt.js+Firebaseで開発してます!

もしよかったら、遊んでみてくださいヽ(=´▽`=)ノ

要望・感想・アドバイスなどあれば、
公式アカウント(@MemoryLoverz)や開発者(@kira_puka)まで♪

参考にしたサイト様

Originally published at qiita.com

きらぷか@i18n補助ツール『トランスノート』開発者

フリーエンジニア/今はNuxt.js/いつかFlutter 受託&アプリ/Webサービス/ゲームを #個人開発 CS修士→SIer/R&D→フリー #paiza はAランクで満足/AtCoderしたい 仕事依頼やご相談はDMまで Kotlin/Python/Swift/Unity/Java/Haskell/DDD

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント