django で初期データ投入のメモ

空のマイグレーションを作成する

コマンドは下の通り。これで空のマイグレーションファイルを作成します。

python manage.py makemigrations app --empty

処理を作成する

作成された空のマイグレーションファイルに処理を記述します。サンプルは下の通りです。

from django.db import migrations

def create_data(apps, schema_editor):
    Writer = apps.get_model('app', 'writer')
    Writer.objects.update_or_create(id=1, defaults={'name': 'hoge'})

def noop(apps, schema_editor):
    # 失敗した時は何もしない。
    pass

class Migration(migrations.Migration):

    dependencies = [
        ('app', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(create_data, noop),
    ]

migrate を実行すると第一引数の create_data が実行されます。もしこれに失敗した場合は第二引数が実行されます。

今回は Writer モデルに hoge を追加しているだけです。失敗した場合も noop として何も実行していませんがロールバックするための処理などを入れたりします。