Spec-Zone.ru › Django 6.0

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

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

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

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

Предоставление данных с помощью фикстур

Также можно предоставить данные с помощью фикстур, однако эти данные не загружаются автоматически, кроме случаев, когда используется TransactionTestCase.fixtures.

Фикстура — это набор данных, который Django умеет импортировать в базу данных. Если у вас уже есть данные, проще всего создать фикстуру с помощью команды manage.py dumpdata. Или можно написать фикстуры вручную: их можно сохранить в документах JSON, XML или YAML (если установлен PyYAML). В документации по сериализации приведены дополнительные сведения о каждом из поддерживаемых форматов сериализации.

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

См. также

Фикстуры также используются средой тестирования для настройки согласованной тестовой среды.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/howto/initial-data/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API