# Django 5.0.9.dev20240806133106 ドキュメント

# モデルに初期データを投入する

アプリを最初にセットアップするとき、データベースに、ハードコーディングされたデータをあらかじめ入力しておくと便利なことがあります。マイグレーションまたはフィクスチャで初期データを提供できます。

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

アプリの初期データを自動的にロードするには、 データマイグレーション を作成します。マイグレーションはテストデータベースのセットアップ時に実行されるため、 いくつかの条件 を満たすことで、データが利用できるようになります。

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

フィクスチャ (fixture) を使ってデータを投入することもできますが、 `TransactionTestCase.fixtures` を使わない限り、このデータは自動的にはロードされません。

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

例として、 `Person` モデルのフィクスチャを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` ディレクトリ内に保存しておくことができます。

データを読み込むには、 `manage.py loaddata` `<fixturename>` を呼び出します。ここで `<fixturename>` は作成したフィクスチャファイルの名前です。 `loaddata` を実行するたびに、フィクスチャからデータが読み込まれ、データベースに再ロードされます。これは、フィクスチャによって作成された行の一つを変更してから `loaddata` を再度実行すると、変更が元に戻ってしまうことを意味します。

### フィクスチャファイルを探す場所を Django に教える

デフォルトでは、Django は各アプリの `fixtures` ディレクトリにあるフィクスチャを探すので、 `loaddata sample` コマンドは `my_app/fixtures/sample.json` ファイルを探します。これは相対パスでも動作するので、 `loaddata my_app/sample` では `my_app/fixtures/my_app/sample.json` ファイルが見つかります。

Django は `FIXTURE_DIRS` 設定で指定されたディレクトリのリストからもフィクスチャを探します。

デフォルトの検索を完全に防ぐためには、フィクスチャファイルの場所の指定に絶対パスを使用してください。例えば、 `loaddata /path/to/sample` のようにします。

フィクスチャファイルの名前空間を指定する

Django は、名前が一致するフィクスチャファイルを最初に見つけると、そのフィクスチャ ファイルを使います。そのため、異なるアプリケーションに同じ名前のフィクスチャファイルがあると、 `loaddata` コマンドでそれらを区別できなくなります。この問題を避ける最も簡単な方法は、フィクスチャファイルを 名前空間 で区切ることです。つまり、上記の相対パスの例のように、アプリケーションに応じた名前のディレクトリにファイルを置くことです。

参考

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