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!
すると、こんな感じにボタンが表示される。簡単(´ω`)
小ネタ
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)まで♪