Заполнение моделей начальными данными¶
Иногда необходимо после установки проекта добавить в базу данных начальные данные. Для этого можно использовать файлов фикстуры (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 ищет файлы предустановки¶
By default, Django looks for fixtures in the fixtures directory inside each
app, so the command loaddata sample will find the file
my_app/fixtures/sample.json. This works with relative paths as well, so
loaddata my_app/sample will find the file
my_app/fixtures/my_app/sample.json.
По умолчанию Django ищет папки fixtures внутри папки с приложением. Вы можете немного изменить это поведение, указав в настройках проекта FIXTURE_DIRS список дополнительных директорий для поиска.
Чтобы полностью предотвратить выполнение поиска по умолчанию, используйте абсолютный путь для указания местоположения файла фикстуры, например loaddata /path/to/sample.
Указывайте пространство имен для своих фикстур
Django будет использовать первый найденный файл фикстуры, имя которого подходит, поэтому если у вас есть файлы фикстуры с одинаковым именем в разных приложениях, вы не сможете различить их в командах loaddata. Самый простой способ избежать этой проблемы — задать пространство имен для ваших файлов фикстурыТо есть, поместить их в каталог, названный по имени их приложения, как в примере с относительным путем выше.
См.также
Фикстуры также используются в тестировании для создания и настройки среды для тестирования.