Как предоставить исходные данные для моделей

Иногда полезно предварительно заполнить базу данных жестко закодированными данными, когда вы только создаете приложение. Вы можете предоставить исходные данные с помощью миграций или фикстур.

Предоставление исходных данных при миграции

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

Предоставление данных с приспособлениями

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

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

Укажите Django, где искать файлы приспособлений

По умолчанию 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.

Пространство имен ваших файлов приспособлений

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

См.также

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

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