こんにちは!TodoONadaの土門(@daikidomon)です。
Djangoにデータシードを入れる方法を紹介したいと思います。
前回までで説明した事は以下になります。
ファイルの構造は以下になります。
mysite
├── db.sqlite3
├── hello
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-36.pyc
│ │ └── __init__.cpython-36.pyc
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-36.pyc
│ │ ├── __init__.cpython-36.pyc
│ │ ├── models.cpython-36.pyc
│ │ ├── urls.cpython-36.pyc
│ │ └── views.cpython-36.pyc
│ ├── static
│ │ └── css
│ │ ├── bootstrap.min.css
│ │ └── style.css
│ ├── templates
│ │ └── index.html
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── manage.py
└── mysite
├── asgi.py
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-36.pyc
│ ├── settings.cpython-36.pyc
│ ├── urls.cpython-36.pyc
│ └── wsgi.cpython-36.pyc
├── settings.py
├── urls.py
└── wsgi.py
データシードの説明
ウェブアプリを開発する際、テストデータやマスターデータを入れる場合が多く存在します。
今回は、Djangoのfixtureでテストデータや、
マスターデータを生成する方法を説明します。
データシードを生成するための準備
mysite/hello/models.pyは以下の様になっています。
from django.db import models
# Create your models here.
class Personinfo(models.Model):
GENDER = [
('Male','Male'),
('Female','Female'),
]
last_name = models.CharField(max_length=30)
first_name = models.CharField(max_length=30)
gender = models.CharField(max_length=10,choices=GENDER)
age = models.IntegerField(default=0)
birthday = models.DateField()
email = models.EmailField()
def __str__(self):
return '<Name:'+self.last_name+' '+self.first_name+' age:'+str(self.age)+'>'
なので今回このモデルに合うテストデータを入れます。
モデルについて疑問がある方は以下の記事を見てください。
参考: Djangoモデルの説明
今回はDjangoのfixture機能を使います。
fixtureは特にsettings.pyでFIXTURE_DIRSで追加設定しない場合、Django各アプリケーション内のfixturesフォルダにあります。
なのでまずmysite/hello内にfixturesフォルダを作ります。
その中にtest-data.jsonを作ります。
このtest-data.jsonはjson形式のデータファイルです。
test-data.jsonは以下の様になっております。
[
{
model: hello.Personinfo,
fields: {
last_name: test_1_last,
first_name: test_1_first,
gender:Male,
age:20,
birthday:2000-01-01,
email:test_one@gmail.com
}
},
{
model: hello.Personinfo,
fields: {
last_name: test_2_last,
first_name: test_2_first,
gender:Female,
age:10,
birthday:2010-01-01,
email:test_two@gmail.com
}
}
]
これで、入れるデータの準備は整いました。
では次はこの二つのデータを入れてみましょう。
データをデータベースに反映する方法
方法はプロジェクトファイルに入り(manage.pyと同じディレクトリ)に入り、
いかのコマンドを入れます。
python manage.py loaddata アプリ名/fixtures/データ
では実際にデータベースに反映してみます。 以下のコマンドを入れます。
python manage.py loaddata hello/fixtures/test-data.json
では<ipアドレス>:8000/adminのアドミン画面で確認してみましょう!
アドミン(管理者機能)について疑問がある方は以下の記事をみてください。
データを入れる前:
データを入れた後:
入れるのに成功しました!
もしテストデータなどがある場合この機能で入れてみましょう!