Перенос приложений в Django
Есть у меня на сайте несколько приложений, и сайт выглядит примерно так:
site/
../manage.py
../static/
../templates/
../site/
..../apps.py
..../settings.py
../app1/
..../apps.py
../app2/
..../apps.py
Во время разработки я решил перенести приложения в отдельный каталог, чтобы сайт стал примерно таким:
site/
../manage.py
../static/
../templates/
../site/
..../apps.py
..../settings.py
../django_apps/
..../app1/
....../apps.py
..../app2/
....../apps.py
Мне пришлось переименовать все все приложения из app1 в django_apps.app1 в settings.py и локальных app.py, но у меня есть уже много миграций и заполненная база данных, и миграции не дают мне выполнить это. Возможен ли такой перенос, чтобы не пришлось перезаполнять данные, и как это нужно сделать?
Ответы (1 шт):
Окей, было несложно, но я справился.
Для начала мне пришлось, собственно, переместить катологи приложений в один общий каталог django_apps.
Затем в settings.py переименовать все INSTALLED_APPS из 'app_name' в 'django_apps.app_name', чтобы при запуске они могли импортироваться, а также в классе конфигурации приложений в apps.py копировать атрибут name = 'app_name' в label = 'app_name', а сам name изменить в name = 'django_apps.app_name'. Сделано это потому, что name хранит путь к приложению, а само имя приложения и талицы хранится в 'label'.
Собственно, вот и всё, но да не всё. В конце необходимо изменить все импорты из других приложений и миграций из from app_name.tools import something в from django_apps.app_name.tools import something, и не забыть переименвать все app_name.models.functions в django_apps.app_name.models.functions внутри миграций.
Вот и всё, оказалось, не так уж сложно.