search
LoginSignup
16
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

Organization

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)まで♪

参考にしたサイト様

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
16
Help us understand the problem. What are the problem?