tag:crieit.net,2005:https://crieit.net/tags/%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2/feed 「管理画面」の記事 - Crieit Crieitでタグ「管理画面」に投稿された最近の記事 2019-11-27T13:45:50+09:00 https://crieit.net/tags/%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2/feed tag:crieit.net,2005:PublicArticle/15563 2019-11-27T13:45:50+09:00 2019-11-27T13:45:50+09:00 https://crieit.net/posts/django-import-export-CSV django-import-exportで管理画面にCSVエクスポート機能を追加する <p>Djangoのadminサイト、調べてみるといろいろプラグインがあるらしい。</p> <p>管理画面のデータをCSVなどの形式でインポート/エクスポートしたくなったので、<br /> 調べてみたら<a target="_blank" rel="nofollow noopener" href="https://django-import-export.readthedocs.io/en/stable/index.html">django-import-export</a>で簡単にできた。その時の備忘録。</p> <h5 id="インストール"><a href="#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">インストール</a></h5> <p>まずはpipでインストール</p> <pre><code class="shell">$ pip install django-import-export </code></pre> <h5 id="設定"><a href="#%E8%A8%AD%E5%AE%9A">設定</a></h5> <p><code>import_export</code>をINSTALLED_APPSに追加</p> <pre><code class="python"># settings.py INSTALLED_APPS = ( ... 'import_export', ) </code></pre> <h5 id="admin.pyに追加"><a href="#admin.py%E3%81%AB%E8%BF%BD%E5%8A%A0">admin.pyに追加</a></h5> <p>対象のデータに対する設定を追加していく。</p> <p>サンプルのモデルはこんな感じ。</p> <pre><code class="python"># models.py class Book(models.Model): name = models.CharField('Book name', max_length=100) author = models.CharField('Book name', max_length=100) </code></pre> <p>django-import-exportの設定。</p> <p>対象とするモデルに対して<code>ModelResource</code>を継承したクラスを追加する。<br /> 設定関連はココに書いていくらしい。</p> <pre><code class="python"># 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 </code></pre> <p>最後に、ImportExportModelAdminを継承したAdminクラスを用意して、<br /> resource_classに<code>ModelResource</code>を継承したクラスを設定すればOK!</p> <p>すると、こんな感じにボタンが表示される。簡単(<em>´ω`</em>)</p> <p><img width="221" alt="スクリーンショット 2019-11-27 13.38.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/aaaac4b5-e0dd-97ff-6391-a57c9d27ad63.png"></p> <h4 id="小ネタ"><a href="#%E5%B0%8F%E3%83%8D%E3%82%BF">小ネタ</a></h4> <h5 id="Exportだけにする: Importを無効化"><a href="#Export%E3%81%A0%E3%81%91%E3%81%AB%E3%81%99%E3%82%8B%3A+Import%E3%82%92%E7%84%A1%E5%8A%B9%E5%8C%96">Exportだけにする: Importを無効化</a></h5> <p>インポートは別にいらないなと思ったので、無効化してみた。<br /> <code>ExportMixin</code>だけにするといいらしい。</p> <pre><code class="python"># ... 略 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 </code></pre> <h5 id="Exportできるフォーマットを指定する"><a href="#Export%E3%81%A7%E3%81%8D%E3%82%8B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B">Exportできるフォーマットを指定する</a></h5> <p>デフォルトだとJSONとかYMLとかいろいろ選べるけどCSVだけでいいので、<br /> 選択できる部分を絞ってみた。formatsを指定すればOK</p> <pre><code class="python"># ... 略 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で指定できる </code></pre> <p>以上!!</p> <h2 id="こんなのつくってます!!"><a href="#%E3%81%93%E3%82%93%E3%81%AA%E3%81%AE%E3%81%A4%E3%81%8F%E3%81%A3%E3%81%A6%E3%81%BE%E3%81%99%21%21">こんなのつくってます!!</a></h2> <p>積読用の読書管理アプリ 『積読ハウマッチ』をリリースしました!<br /> <a target="_blank" rel="nofollow noopener" href="https://tsundoku.site">積読ハウマッチ</a>は、Nuxt.js+Firebaseで開発してます!</p> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/572d4947-f40b-e4dc-1c9c-bc584cd2a66c.png" width="200"/></p> <p>もしよかったら、遊んでみてくださいヽ(=´▽`=)ノ</p> <p>要望・感想・アドバイスなどあれば、<br /> 公式アカウント(<a target="_blank" rel="nofollow noopener" href="https://twitter.com/MemoryLoverz">@MemoryLoverz</a>)や開発者(<a target="_blank" rel="nofollow noopener" href="https://twitter.com/kira_puka">@kira_puka</a>)まで♪</p> <h1 id="参考にしたサイト様"><a href="#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%9F%E3%82%B5%E3%82%A4%E3%83%88%E6%A7%98">参考にしたサイト様</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://django-import-export.readthedocs.io/en/stable/index.html#">Django import / export — django-import-export 1.2.0 documentation</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://stackoverflow.com/questions/29252500/django-import-export-only-export">Django import-export: only export - Stack Overflow</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://stackoverflow.com/questions/45930421/how-to-have-only-csv-xls-xlsx-options-in-django-import-export">How to have only CSV, XLS, XLSX options in django-import-export? - Stack Overflow</a></li> </ul> きらぷか@積読ハウマッチ/SSSAPIなど