概要
- Djangoでは、
python manage.py loaddata
コマンドを使用してfixtures
データをデータベースにロードできます。 - これは初期データ投入時に使えます。今回は実際にやってみたので、本記事ではその方法を解説します。
実行手順
-
fixtures
ディレクトリ内のJSONファイルを作成します。- JSONであれば、ファイル名は必ず.json拡張子で終わる必要がありますが、JSONのほか、XMLやYAML形式でも書くことができます。
- フィクスチャ (
fixture
) とは、 テストや開発のためのサンプルデータを含むファイルです。Django のデータベースに投入できるよう準備済みのデータの集まりのことです。Djangoでは、フィクスチャを使用してアプリケーションの初期状態を構築することができます。アプリケーションの開発やテストに欠かせない便利なツールです。
-
今回は、事前にマイグレーションはしてある前提とします。
-
python manage.py loaddata
コマンドを使用して、fixtures
データをデータベースにロードします。例えば、以下のように実行します。
$ python manage.py loaddata sample_data.json
Installed 10 object(s) from 1 fixture(s)
-
sample_data.json
の前にfixutres
のパスを明示的に書いても良いですが、Djangoがloaddata
コマンドを実行する際に、アプリケーションのフィクスチャディレクトリを自動的に検索します。 - 実行後に、正常にロードされていれば、
Installed...
と表示されます。 - 複数のjsonファイルがあれば、スペースで連続させることもできます。
$ python manage.py loaddata hoge_data.json foo_data.json
Django管理画面からの確認方法
- アプリ側で確認できるよう実装されていればそこから確認してもOKですし、DBクライアントソフトから確認するでもOKですが、djangoでは管理画面からロードされたデータを表示することができます。
- Djangoの管理画面とは:Webブラウザを使用してデータベースの内容を閲覧・編集するためのユーザーインターフェース
- Djangoのプロジェクトにアクセスし、管理画面にログインします。URLは
admin
をつけてあげればアクセスできます。 - admin画面で見る場合、
models.py
とadmin.py
には以下のような記載が必要です。
models.py
from django.db import models
class Movie(models.Model):
title = models.CharField(max_length=100)
director = models.CharField(max_length=100)
released_date = models.DateField()
def __str__(self):
return self.title
admin.py
from django.contrib import admin
from .models import Movie
admin.site.register(Movie)
- admin画面にアクセスすると、以下のように表示されているはずです。
- モデルの管理ページで、特定のレコードを表示するには、レコードをクリックします。これにより、レコードの詳細ページが表示されます。
- と言うことで簡単に初期データをロードできるのがいいですよね。
fixtures
ディレクトリには、アプリケーションの初期状態を表すフィクスチャが含まれていて初期状態を再現するために使用されると覚えておくと、今後も利用することが多そうです。 - Djangoでいうフィクスチャは、Ruby on Railsでいう「seedデータ(
seeds.rb
)と似ていますね。- 以前に書いた記事はこちら:【Ruby on Rails】seedとseed_fuの違い・CSVファイルで読み込ませる方法
-
loaddata
と逆で、DBに格納されているデータをダンプしておくコマンドdumpdata
もあります。