djangoでデータベースに初期値を入れる(fixtures)方法
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
ディスカッション
コメント一覧
まだ、コメントがありません