How to provide initial data for models¶
It’s sometimes useful to prepopulate your database with hard-coded data when you’re first setting up an app. You can provide initial data with migrations or fixtures.
Provide initial data with migrations¶
To automatically load initial data for an app, create a data migration. Migrations are run when setting up the test database, so the data will be available there, subject to some limitations.
Provide data with fixtures¶
You can also provide data using fixtures,
however, this data isn’t loaded automatically, except if you use
TransactionTestCase.fixtures
.
Фикстура - это набор данных, которые Django умеет импортировать в базу данных. Самый простой способ создания фикстуры, если у вас уже есть некоторые данные, - использовать команду manage.py dumpdata
. Или вы можете писать фикстуры вручную; фикстуры могут быть записаны как документы JSON, XML или YAML (при установленном PyYAML). В serialization documentation есть более подробная информация о каждом из этих поддерживаемых serialization formats.
В качестве примера, вот как может выглядеть фикстура для модели 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
внутри вашего приложения.
You can load data by calling manage.py loaddata
<fixturename>
, where <fixturename>
is the name of the fixture file
you’ve created. Each time you run loaddata
, the data will be read
from the fixture and reloaded into the database. Note this means that if you
change one of the rows created by a fixture and then run loaddata
again, you’ll wipe out any changes you’ve made.
Tell Django where to look for fixture files¶
По умолчанию Django ищет фиксы в каталоге fixtures
внутри каждого приложения for, поэтому команда 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
.
Namespace your fixture files
Django будет использовать первый найденный файл фикстур, имя которого совпадает, поэтому если у вас есть файлы фикстур с одинаковыми именами в разных приложениях, вы не сможете различать их в командах loaddata
. Самый простой способ избежать этой проблемы - это разделение имен ваших файлов приспособлений. То есть, поместить их в каталог с именем приложения, как в примере с относительным путем выше.
См.также
Приспособления также используются testing framework, чтобы помочь создать последовательную тестовую среду.