Заполнение моделей начальными данными

Иногда необходимо после установки проекта добавить в базу данных начальные данные. Для этого можно использовать файлов фикстуры(fixtures).

Создание начальных данных с помощью файлов(fixtures)

Файлы предварительной настройки (fixtures) содержат набор данных, которые Django может импортировать в базу данных. Самый простой путь создания таких файлов (при условии что ваша база данных уже содержит некоторую нужную информацию) это использование команды manage.py dumpdata. Вы также может создать данные “вручную” используя синтаксис XML, YAML(при установленном PyYAML) или JSON и сохранив результат в соответствующем формате. В разделе сериализация данных более детально описан каждый из поддерживаемых форматов. (Прим. пер. : существуют дополнения, которые могут помочь в создании файлов настроек, н-р, пакет django-fixture-magic)

Н-р, ниже представлено содержимое такого файла в формате JSON для простой модели Person:

[
  {
    "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 в папке приложения и сохраните в ней файлы с данными. ( Прим. пер. : имя fixtures предопределено в Django, и в случае опечатки в названии - данные не будут найдены!)

Загрузить данные просто: выполните команду manage.py loaddata <fixturename>, где <fixturename> это имя созданного вами файла с данными. Каждый раз при запуске loaddata, данные будут считываться из файлов и записываться в базу данных. Обратите внимание, вы можете изменить загруженные начальные данные в процессе работы, но при следующем вызове loaddata все изменения будут утеряны.

Где Django ищет файлы предустановки

По умолчанию Django ищет и “просматривает” папки fixtures внутри папки с приложением. Вы можете немного изменить это поведение, указав в настройках проекта FIXTURE_DIRS список дополнительных директорий для поиска.

При запуске manage.py loaddata, вы можете указать абсолютный путь к файлу с данными, “отменив” тем самым механизм поиска по умолчанию.

См.также

Предварительная настройка данных также используется в тестировании для создания и настройки среды для тестирования.