概要
Djangoでデータベースを利用する際に初期データが必要になる場合があります。
今回はfixtureを利用して初期データを作成し、データベースにインポートする手順について説明します。
以前作成したToDoアプリケーションに対して、fixtureを利用して初期データのインポートを行います。
Djangoで作るToDoリスト
開発環境
開発環境は下記を利用しています。
Python 3.6.7
Django 2.1.8
SQLite 3.7.17
GitHub
ベースにしたToDoアプリケーションは下記のURLになります。
https://github.com/acecrc/django-todo
今回fixtureを追加した物は下記の下記のURLになります。
https://github.com/acecrc/django-fixture
Djangoの初期データをfixtureで作成する
ToDoアプリケーションをGitHubからダウンロード
下記のコマンドでGitHubからベースとなるToDoアプリケーションをクローンしてください。
$ git clone git@github.com:acecrc/django-todo.git
$ cd django-todo
仮想環境の構築
下記のコマンドでpythonの仮想環境を構築してください。
$ virtualenv ~/eb-virt
$ source ~/eb-virt/bin/activate
(eb-virt) $ pip3 install -r requirements.txt
fixture用のディレクトリ作成
fixtureを保存するためのディレクトリを作成しましょう。
Djangoではfixture用のディレクトリは各アプリケーション内のfixturesディレクトリに作成するという決まりがあるため、下記のようにディレクトリを作成してください。
(eb-virt) $ mkdir todo/fixtures
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── README.md
├── requirements.txt
└── todo #todoアプリケーションのディレクトリ
├── admin.py
├── apps.py
├── fixtures #作成したディレクトリ
fixtureファイルの作成
fixture用のディレクトリの中にfixtureファイルを作成しましょう。
fixtureはxml, yaml, jsonの3種類を使用することができます。
今回はfixture1.jsonというfixtureファイルを作成することとします。
5件分のToDoデータを作成してみましょう。
[
{
"model": "todo.todo",
"pk": 1,
"fields": {
"todo": "todo1",
"created_at": "2019-01-01T12:34:56.789Z",
"updated_at": "2019-01-01T12:34:56.789Z"
}
},
{
"model": "todo.todo",
"pk": 2,
"fields": {
"todo": "todo2",
"created_at": "2019-01-02T12:34:56.789Z",
"updated_at": "2019-01-02T12:34:56.789Z"
}
},
{
"model": "todo.todo",
"pk": 3,
"fields": {
"todo": "todo3",
"created_at": "2019-01-03T12:34:56.789Z",
"updated_at": "2019-01-03T12:34:56.789Z"
}
},
{
"model": "todo.todo",
"pk": 4,
"fields": {
"todo": "todo4",
"created_at": "2019-01-04T12:34:56.789Z",
"updated_at": "2019-01-04T12:34:56.789Z"
}
},
{
"model": "todo.todo",
"pk": 5,
"fields": {
"todo": "todo5",
"created_at": "2019-01-05T12:34:56.789Z",
"updated_at": "2019-01-05T12:34:56.789Z"
}
}
]
マイグレーションの実施
fixtureファイルからデータをインポートする前に、データベースのテーブルを作成する必要があります。
下記のコマンドでデータベースのテーブルを作成してください。
(eb-virt) $ python3 manage.py migrate
初期データの読み込み実施
fixtureファイルからデータをインポートするために下記のコマンドを実行してください。
インポートに成功すると「Installed 5 object(s) from 1 fixture(s)」というメッセージが表示されます。
(eb-virt) $ python3 manage.py loaddata fixture1.json
Installed 5 object(s) from 1 fixture(s)
アプリケーションの起動
アプリケーションを起動するため下記のコマンドを実行してください。
(eb-virt) $ python3 manage.py runserver 8080
動作確認
ブラウザでToDoの一覧を表示させてみましょう。
http://127.0.0.1:8080/todo/list/
下記のように5件のToDoが表示されていれば成功です。
以上