Как предоставить начальные данные для моделей
Иногда полезно предварительно заполнить вашу базу данных жёстко закодированными данными при первом создании приложения. Вы можете предоставить начальные данные с помощью миграций или фикстур.
Предоставление начальных данных с помощью миграций
Для автоматической загрузки начальных данных для приложения создайте миграцию данных. Миграции выполняются при настройке тестовой базы данных, поэтому данные будут там доступны, подлежащие некоторым ограничениям.
Предоставление данных с помощью фикстур
Вы также можете предоставить данные, используя фикстуры, однако эти данные не загружаются автоматически, если вы не используете 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.0/howto/initial-data/