Ответ 1
Юг и светильники
Юг просто исправляет syncdb, чтобы пропускать загрузку прибора для моделей с миграциями и фактически загружает их после завершения последней миграции для приложения.
Убедитесь, что файл initial_data находится в нужном месте
Загрузка исходных_данных не требует, чтобы вы действительно что-то делали, но поместите светильники в правильное место, как описано в документации Django.
Чтобы процитировать документы:
По умолчанию Django просматривает каталог приборов внутри каждого приложения для светильники. Вы можете установить для параметра FIXTURE_DIRS список дополнительных каталоги, в которых должен выглядеть Django.
Это означает, что если у вас есть приложение под названием "myapp", вы создадите в нем "fixtures" и разместите там json, например: myproject/myapp/fixtures
.
Django 1.7 и более новый
Django 1.7 представил встроенные миграции. У них есть интерфейс, похожий на Юг; команды управления для создания миграций makemigrations
, запустите их migrate
и другие.
Однако, теги initial_data
больше не загружаются автоматически при запуске syncdb; если он не является существующим приложением и не имеет миграций. Это упомянутое в примечаниях к выпуску.
Документы теперь рекомендуют создать datamigration
для обработки загрузки прибора. К счастью, это довольно легко сделать, вот как я обычно это делаю:
1. создайте пустую миграцию данных
$ python manage.py makemigrations --empty myapp
Если у вас была только начальная миграция, вы попадаете в эти файлы (обратите внимание, что я переименовал миграцию 0002 для ясности):
myapp/
├── __init__.py
├── fixtures
│ └── my_initial_data.json
└── migrations
├── 0001_initial.py
├── 0002_load_fixture.py
└── __init__.py
2. обновите код 0002_load_fixture.py
, чтобы запустить loaddatah3 >
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
from django.core.management import call_command
def load_my_initial_data(apps, schema_editor):
call_command("loaddata", "my_initial_data.json")
class Migration(migrations.Migration):
dependencies = [
('myapp', '0001_initial'),
]
operations = [
migrations.RunPython(load_my_initial_data),
]