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.

Provide initial data with migrations

To automatically load initial data for an app, create a data migration. Migrations are run when setting up the test database, so the data will be available there, subject to some limitations.

Provide data with fixtures

You can also provide data using fixtures, however, this data isn’t loaded automatically, except if you use TransactionTestCase.fixtures.

Фикстура - это набор данных, которые Django умеет импортировать в базу данных. Самый простой способ создания фикстуры, если у вас уже есть некоторые данные, - использовать команду manage.py dumpdata. Или вы можете писать фикстуры вручную; фикстуры могут быть записаны как документы JSON, XML или YAML (при установленном PyYAML). В serialization documentation есть более подробная информация о каждом из этих поддерживаемых serialization formats.

В качестве примера, вот как может выглядеть фикстура для модели 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 внутри вашего приложения.

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.

Tell Django where to look for fixture files

По умолчанию Django ищет фиксы в каталоге fixtures внутри каждого приложения for, поэтому команда 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.

Namespace your fixture files

Django будет использовать первый найденный файл фикстур, имя которого совпадает, поэтому если у вас есть файлы фикстур с одинаковыми именами в разных приложениях, вы не сможете различать их в командах loaddata. Самый простой способ избежать этой проблемы - это разделение имен ваших файлов приспособлений. То есть, поместить их в каталог с именем приложения, как в примере с относительным путем выше.

См.также

Приспособления также используются testing framework, чтобы помочь создать последовательную тестовую среду.

Вернуться на верх