• 3.1
  • 3.2
  • 5.0
  • Версия документации: 6.1

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

It’s sometimes useful to prepopulate your database with hardcoded data when you’re first setting up an app. You can provide initial data with migrations or fixtures.

Создание начальных данных с помощью миграций

Чтобы автоматически загрузить исходные данные для приложения, создайте миграцию данных. Миграции запускаются при настройке тестовой базы данных, поэтому данные будут доступны там, с учетом некоторых ограничений.

Создание данных с помощью фикстур (fixtures)

Вы также можете предоставить данные, используя fixtures, однако эти данные не загружаются автоматически, за исключением случаев, когда вы используете TransactionTestCase.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 внутри каждого приложения, поэтому команда loaddata sample найдет файл my_app/fixtures/sample.json. Это также работает с относительными путями, поэтому loaddata my_app/sample найдет файл my_app/fixtures/my_app/sample.json.

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

Чтобы полностью предотвратить выполнение поиска по умолчанию, используйте абсолютный путь для указания местоположения файла фикстуры, например loaddata /path/to/sample.

Указывайте пространство имен для своих фикстур

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

См.также

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

Back to Top