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

Иногда может понадобиться предварительно заполнить базу данных жестко запрограммированными данными. Это полезно для автоматического включения исходных данных в настройки проекта, а не добавления вручную. Джанго поставляется с простым способом загрузки и дампа данных из базы данных в файлы, называемые 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

results matching ""

    No results matching ""