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など