アプリケーションを最初に設定するときに、データベースにハードコードしたデータをあらかじめ入力しておくと便利なことがあります。 マイグレーションまたはフィクスチャで初期データを提供することができます。
アプリケーションの初期データを自動的に読み込みたい場合、データマイグレーション を作成してください。マイグレーションはテストデータベースをセットアップするときに実行されるため、データは有効になりますが、いくつかの制限 があります。
フィクスチャを用いてデータを投入することもできますが、フィクスチャのデータは自動的には投入されません。ただし、 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 re-loaded 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 は各アプリケーション内の fixtures
を探します。FIXTURE_DIRS
設定に追加のディレクトリのリストをセットし、Django に読み込ませることもできます。
manage.py loaddata
を実行する際、フィクスチャのファイルを指定して通常のディレクトリ探索をオーバーライドすることもできます。
参考
フィクスチャは テストフレームワーク でも利用でき、テスト環境の一貫性を保つのに役立ちます。
2022年6月01日