Как вы думаете, это правильный способ переименовать приложение django?

Я читал различные темы и руководства по переименованию и миграции приложений Django (Как переименовать приложение Django и перенести данные из одного приложения в другое например), я также пытался использовать пакет django под названием django-rename-app, но он не сработал вообще.

Я собираюсь объяснить, как я переименовал свое приложение в среде разработки, и хотел бы знать, ожидаете ли вы проблем, поскольку, по-видимому, все работает так же, как и раньше, поэтому я подумываю сделать то же самое в продакшене.

Вот шаги, которые я предпринял внутри моего корневого каталога проекта и активированного virtualenv, используя Django 3.2:

Создайте целевое приложение

django-admin startapp app2

Скопируйте эти файлы и каталоги

cp app1/*.py app2/

mkdir app2/templates

mkdir app2/static

cp app1/templates app2/templates

В этом случае у меня была подпапка, названная в честь приложения, поэтому я переименовал ее следующим образом

mv app2/templates/app1 app2/templates/app2

cp app1/static app2/static

Models.py

Измените атрибуты related_name всех ForeignKeys в моем новом models.py и обновите все их ссылки в моих представлениях, админке, форме и шаблонах

Активируйте новое приложение

Добавьте мое приложение app2 в список включенных приложений в settings.py

Удалить pycache

Найдите и удалите или опустошите все каталоги pycache в app2

Миграции

это не будет работать, пока все перекрывающиеся биты не будут исправлены, поэтому так я проверял, что все в порядке (на этом этапе он не будет знать о проблеме URLs)

python manage.py makemigrations

python manage.py migrate

Клонирование данных

Теперь я использовал оболочку Django для миграции данных из app1 в app2

python manage.py shell

import app1

from app2.models import *

Таким образом, мне придется использовать "app1.ModelName" для обращения к старому приложению и просто "ModelName" для обращения к новым экземплярам app2

Затем я использую Models and QuerySet API для простого создания новых объектов в app2 с циклами for для каждого экземпляра app1, с соответствующим объектом app2, который сохраняется (это должно быть написано индивидуально и зависит от каждой ситуации)

Деактивируйте старое приложение

Теперь я удаляю и комментирую старую ссылку app1 в settings.py так, чтобы она была отключена

Переименовать директорию

На этом этапе мне нужно было переименовать каталог app1/ во что-то неизвестное Django

mv app1 app1_

Обработайте новые ошибки

Похоже, здесь появилось еще несколько ошибок с URLS и Views, поэтому мне пришлось просто обновить ссылки app1 на app2, пока они не исчезли

Удалить таблицу базы данных

Войдите в MySQL (в моем случае), и отключите FOREIGN_KEY_CHECKS

USE yourowndjangodatabase;

ПОКАЗАТЬ ТАБЛИЦЫ;

SET FOREIGN_KEY_CHECKS=0;

теперь я могу удалить их следующим образом

DROP TABLE app1__yourfirstmodel;

DROP TABLE app1__yoursecondmodel;

и так далее, пока не останется ни одного, затем установите FOREIGN_KEY_CHECKS обратно в 1, чтобы он был включен

SET FOREIGN_KEY_CHECKS=1;

Как я видел Невозможно уничтожить таблицу: Ограничение внешнего ключа не работает

ВЫВОД

И в основном это было все, это прекрасно работало для моей среды разработки. У меня есть идеальная копия моего предыдущего приложения app1 и веб-приложения, которое теперь просто использует app2.

Я импровизировал, поэтому я не уверен, что это правильная процедура, но она сработала, поэтому я хотел бы спросить, видите ли вы какие-либо проблемы или подозреваете, что будут проблемы в производстве.

Вернуться на верх