djangoでデータベースに初期値を入れる(fixtures)方法

2017年11月10日

djangoでfixtue

pythonのフレームワークdjangoでアプリを作成中で、そのときにデータベースのテストデータをかんたんに入れたいと思いRoRでもあったseedとかfixtureとか言うのが、djangoにもないかと思い調べたらあるということなのでやってみた。

流れ

  • fixturesディレクトリ作成
  • fixtureファイルの作成(seed.json)
  • modelの削除
  • データ読み込み


fixturesディレクトリ作成

このファイルをどのように設置するのかということだが,プロジェクト$ django-admin startproject mysite の中に作ったアプリケーション$ python manage.py startapp pollsの中にfixturesというディレクトリを作ります。

その中に[ファイル名.json]というファイルを作ります。

fixtueファイルの作成(seed.json)

先に行っておくと最初yamlでデータを作ったけど原因不明のエラーが出て使えなかったのでjsonを使うことにしました。

以下のようなmodel.pyを作っていたとして

[code lang=python]
# app/info/model.py
from django.db import models

# Create your models here.

class Info(models.Model):
name = models.CharField('名前',max_length=30)
date = models.DateField(auto_now=False)

[/code]

以下のようなjsonファイルを作成します。(僕はseed.jsonとしました。)

[code lang=text]
#app/info/fixtures/seed.json
[
{
"model": "app.info",
"pk": 1,
"fields":{
"name": "ユーザ1",
"date": "2017-04-01"
}
},
{
"model": "app.info",
"pk": 2,
"fields":{
"name": "ユーザ2",
"date": "2017-04-01"
}
}
]
[/code]

modelの削除

データベースを削除します。(ユーザとかもすべて削除されますので注意)

[code lang=text]
$ python manage.py flush –database=default
[/code]

ここで指定されている–database=defaultは(app/app/settings.py)のDATABASESのところに定義されている’default’のことを言ってるので、それぞれ違うデータベースを設定していればそれに読み替える。

データ読み込み

マイグレーション

[code lang=text]
$ python manage.py makemigrations
$ python manage.py migrate
[/code]

管理ユーザ作成

[code lang=text]
$ python manage.py createsuperuser
[/code]

fixtureよりデータ登録

[code lang=text]
$ python manage.py loaddata seed
[/code]

※拡張子は不要です(seed.json -> seed)ß

参考


http://programmer-jobs.blogspot.jp/2015/03/django-python-manage-py-flush-database.html