Предоставление исходных данных для моделей
Иногда может понадобиться предварительно заполнить базу данных жестко запрограммированными данными. Это полезно для автоматического включения исходных данных в настройки проекта, а не добавления вручную. Джанго поставляется с простым способом загрузки и дампа данных из базы данных в файлы, называемые fixtures(файлы предварительной настройки).
Джанго поддерживает fixtures в форматах JSON, XML или YAML. Мы собираемся создать fixtures для включения в проект некоторых первоначальных объектов Subject.
Сначала создайте суперпользователя с помощью следующей команды:
python manage.py createsuperuser
Теперь откройте в браузере http://127.0.0.1:8000/admin/courses/subject/ . Создайте несколько subjects с помощью админ-панели. Страница со списком объектов должна выглядеть следующим образом:
Выполните в терминале следующую команду:
python manage.py dumpdata courses --indent=2
Вы увидите следующий вывод:
[
{
"fields": {
"title": "Programming",
"slug": "programming"
},
"model": "courses.subject",
"pk": 1
},
{
"fields": {
"title": "Mathematics",
"slug": "mathematics"
},
"model": "courses.subject",
"pk": 2
},
{
"fields": {
"title": "Physics",
"slug": "physics"
},
"model": "courses.subject",
"pk": 3
},
{
"fields": {
"title": "Music",
"slug": "music"
},
"model": "courses.subject",
"pk": 4
}
]
Команда dumpdata передает данные из базы данных в стандартном виде, сериализованном в JSON по умолчанию. Результирующая структура данных включает сведения о модели и ее полях для того, чтобы она могла загрузить ее в базу данных.
Можно указать имена приложений или указать модели для размещения данных используя формат app.Model. Можно также указать формат, используя флаг --format. По умолчанию dumpdata выводит сериализованные данные в файл по-умочанию. Однако можно указать выходной файл с помощью флага --output. Флаг --indent позволяет задать отступы. Для получения дополнительных сведений о параметрах dumpdata выполните python manage.py dumpdata --help
.
Сохраните этот дамп используя следующие команды:
mkdir courses/fixtures
python manage.py dumpdata courses --indent=2 --output=courses/fixtures/subjects.json
Используйте админ-панель для удаления созданных subjects. Затем загрузите fixture в базу данных с помощью следующей команды:
python manage.py loaddata subjects.json
Все объекты Subject, включенные в fixture, загружены в базу данных.
По умолчанию Джанго ищет файлы в каталоге fixtures/ каждого приложения, но можно указать полный путь к файлу fixture для команды loaddata. Можно также использовать параметр FIXTURE_DIRS для того, чтобы сообщить о Джанго дополнительных каталогах для поиска fixtures.
Fixtures не только полезны для исходных данных, но и для предоставления образцов данных для приложения или данных, необходимых для тестирования.
Можно прочитать о том, как использовать fixtures для тестирования здесь: https://docs.djangoproject.com/en/1.8/topics/testing/tools/\#topics-testing-fixtures
Если требуется загрузить fixtures для миграции моделей, смотрите документацию Джанго о миграции данных. Помните, что в главе 9 мы создали пользовательскую миграцию, расширяя свой магазин для переноса существующих данных после изменения моделей для перевода. Вы можете найти документацию по миграции данных здесь: https://docs.djangoproject.com/en/1.8/topics/migrations/\#data-migrations