LoginSignup
12
12

More than 3 years have passed since last update.

Djangoの初期データをfixtureで作成する

Last updated at Posted at 2019-06-12

概要

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データを作成してみましょう。

todo/fixtures/fixture1.json
[
  {
    "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が表示されていれば成功です。

django-fixture_list.png

以上

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12