Spec-Zone.ru › Django 5.1

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

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

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

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

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

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

Spec-Zone.ru

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