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

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

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

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

Предоставление данных с помощью приспособлений

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

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

См.также

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

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