Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
46
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@zakuro9715

Djangoでfixtureを使う

Fixtureの定義

Djangoは、Fixtureを各アプリケーション内のfixturesディレクトリから探します。
設定ファイルのFIXTURE_DIRSに追加のディレクトリを定義することもできますが、何か事情がない限り使うことはないでしょう。

Fixtureの形式としては、xml, yaml, jsonの3種類が使用できます。

以下にjsonの例をあげますが、xml, yamlでもそれぞれの形式で同じ表現を記述すれば問題ありません。

fixture.json
[
  {
    "model": "app.hoge",
    "pk": 1,
    "fields": {
      "foo": 1,
      "bar": 2
    }
  }
]

Fixtureの利用

Case1: 初期データ

マスタデータなど、初期データを投入したい場合は多々あると思います。

initial_data.[xml/ymal/json]という名前のファイルをFixtureディレクトリ内に置いておくと、
python manage.py migrateを実行するたびにロードされます。

このデータは毎回ロードされるため、変更するべきではありません。

また、python manage.py loaddata <fixturename>を実行することで、明示的にロードすることもできます。
は、前述のディレクトリに加えて、通常のパスからも探索されます。

Case2: テスト用データ

Fixtureはテスト時にも活躍します。

各テストのクラスに、使用するFixture名を列挙したfixturesという配列を用意しておくと、setUp()で自動的にデータがロードされます。

Fixture名の拡張子は省略することができます。その場合は、[xml/yaml/json]のすべてのファイルが探索されます。もちろん、拡張子を指定することもできます。

class HogeTest(TestCase):
    fixtures = ['fixture1', 'fixtrue2.yaml']

    def setUp(self):
        # your setup code here

    def test_hoge(self):
        # your test code here
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
46
Help us understand the problem. What are the problem?