Как я могу переместить модели Django в другое приложение django? Я не уверен, что опция migrage --fake может сработать для меня, так как мне нужно рассмотреть 2 случая
При перемещении моделей из одного приложения django в другое я использовал подход, рекомендованный в этом вопросе: Перемещение нескольких моделей из одного приложения django в другое
class Post(models.Model):
title = models.CharField(max_length=120)
class Meta:
db_table = 'blog_post'
Однако в моем случае у меня также есть несколько моделей, которые необходимо перенести, помимо тех, которые я переношу в другое приложение.
Поскольку я хочу, чтобы некоторые таблицы оставались нетронутыми (те, которые мигрируют в другое приложение), а некоторые другие действительно изменились, то я не думаю, что migrate --fake является вариантом, который я могу использовать.
Что я могу сделать?
Я думаю, что самый безопасный подход заключается в следующем:
- Создайте новое приложение с новыми скопированными моделями
- Запустите
python manage.py makemigrationsдля создания миграций для нового приложения - Запустите
python manage.py migrateдля применения миграций к вашей БД - Запустите
python manage.py makemigrations --emptyдля создания пустой миграции (вам все еще нужно указать имя приложения) - Отредактируйте эту миграцию, чтобы добавить пользовательский python код, используя синтаксис RunPython (см. docs для более подробной информации - не забудьте добавить также обратный код, чтобы ваша миграция могла быть неприменима). Этот код должен перенести все данные из старой таблицы в новую и наоборот для обратного кода.
- Примените миграцию
- Удалите ваши старые модели и запустите
makemigrations.
- Примените последние миграции
Я считаю этот процесс самым безопасным, и вы всегда можете вернуться к любому состоянию в процессе, не теряя никаких данных.