How to provide initial data for models

It's sometimes useful to prepopulate your database with hard-coded data when you're first setting up an app. You can provide initial data with migrations or fixtures.

マイグレーションで初期データを投入する

アプリケーションの初期データを自動的に読み込みたい場合、データマイグレーション を作成してください。マイグレーションはテストデータベースをセットアップするときに実行されるため、データは有効になりますが、いくつかの制限 があります。

フィクスチャでデータを投入する

フィクスチャを用いてデータを投入することもできますが、フィクスチャのデータは自動的には投入されません。ただし、 TransactionTestCase.fixtures を使っている場合を除きます。

フィクスチャは、Djangoがデータベースにインポートする方法を知っているデータのコレクションです。 すでにいくつかのデータがある場合、フィクスチャを作成する最も簡単な方法は manage.py dumpdata コマンドを使用することです。 もしくは、フィクスチャを手動で書くこともできます; フィクスチャは JSON、XML、または (PyYAMLをインストールして) YAML ドキュメントとして記述できます。 serialization documentation でサポートされている各 serialization formats の詳細を確認できます。

As an example, though, here's what a fixture for a Person model might look like in JSON:

[
  {
    "model": "myapp.person",
    "pk": 1,
    "fields": {
      "first_name": "John",
      "last_name": "Lennon"
    }
  },
  {
    "model": "myapp.person",
    "pk": 2,
    "fields": {
      "first_name": "Paul",
      "last_name": "McCartney"
    }
  }
]

YAML のフィクスチャだと以下のようになります:

- model: myapp.person
  pk: 1
  fields:
    first_name: John
    last_name: Lennon
- model: myapp.person
  pk: 2
  fields:
    first_name: Paul
    last_name: McCartney

このデータは、アプリケーション内の fixtures ディレクトリ内に保存しておくことができます。

You can load data by calling manage.py loaddata <fixturename>, where <fixturename> is the name of the fixture file you've created. Each time you run loaddata, the data will be read from the fixture and reloaded into the database. Note this means that if you change one of the rows created by a fixture and then run loaddata again, you'll wipe out any changes you've made.

Django がフィクスチャのファイルを探す場所

デフォルトでは Django は各アプリケーション内の fixtures を探します。FIXTURE_DIRS 設定に追加のディレクトリのリストをセットし、Django に読み込ませることもできます。

manage.py loaddata を実行する際、フィクスチャのファイルを指定して通常のディレクトリ探索をオーバーライドすることもできます。

参考

フィクスチャは テストフレームワーク でも利用でき、テスト環境の一貫性を保つのに役立ちます。