Providing initial data for models¶
It’s sometimes useful to pre-populate your database with hard-coded data when you’re first setting up an app. You can provide initial data with migrations or fixtures.
Providing initial data with migrations¶
If you want 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.
Providing data with fixtures¶
You can also provide data using fixtures, however, this data isn’t loaded
automatically, except if you use TransactionTestCase.fixtures.
Фикстуры (fixtures) содержат набор данных, которые Django может импортировать в базу данных. Самый простой путь создания таких файлов (при условии что ваша база данных уже содержит некоторую нужную информацию) это использование команды manage.py dumpdata. Вы также может создать данные «вручную» используя синтаксис XML, YAML(при установленном PyYAML) или JSON и сохранив результат в соответствующем формате. В разделе сериализация данных более детально описан каждый из поддерживаемых форматов. (Прим. пер. : существуют дополнения, которые могут помочь в создании файлов настроек, н-р, пакет django-fixture-magic)
В качестве примера, ниже представлено содержимое такого файла в формате JSON для простой модели Person:
[
{
"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 в папке приложения и сохраните в ней файлы с данными. ( Прим. пер. : имя fixtures предопределено в Django, и в случае опечатки в названии - данные не будут найдены!)
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 re-loaded 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.
Where Django finds fixture files¶
By default, Django looks in the fixtures directory inside each app for
fixtures. You can set the FIXTURE_DIRS setting to a list of
additional directories where Django should look.
When running manage.py loaddata, you can also
specify a path to a fixture file, which overrides searching the usual
directories.
См.также
Фикстуры также используются в тестировании для создания и настройки среды для тестирования.