Django: Миграции не обнаруживают изменений после ручного удаления файлов миграции в рабочем приложении
Что произошло:
У меня было приложение под названием app с изменениями до 0012 года. Я по ошибке удалил файлы переноса, включая 0001_initial.py. Теперь, когда я запускаю python manage.py приложение makemigrations, новые файлы миграции не обнаруживаются, хотя я внес изменения в модели. Эта проблема сохраняется даже в недавно созданном приложении comments, где файлы миграции также не обнаруживаются, несмотря на добавление новых полей в модели. Что я пробовал:
Я убедился, что приложение указано в списке INSTALLED_APPS. Я запустил python manage.py приложение makemigrations для создания файлов миграции, но никаких изменений обнаружено не было. Я не могу удалить базу данных, поскольку это рабочая среда, и мне нужно сохранить существующие записи и данные. В чем мне нужна помощь:
Мне нужно выяснить, как правильно сбросить или повторно синхронизировать миграции без потери каких-либо производственных данных. На данный момент у меня есть пустая папка миграции с инициализацией.py, которая не создает никакого файла миграции. В частности, как я могу: Восстановите пропущенные миграции после удаления файлов вручную (т.е. для соответствия состоянию базы данных, в которой все еще применяются миграции до 0012 года). Убедитесь, что все новые приложения или изменения в моделях правильно обнаружены и имеют соответствующие файлы миграции. Я уже проверил следующее:
Параметр INSTALLED_APPS содержит соответствующие приложения. Попытался использовать --run-syncdb, но ничего не произошло. Я пробовал использовать команду makemigrations с --empty и --verbosity 3, но это не помогает.
Мы были бы очень признательны за любые советы о том, как устранить эту проблему, не затрагивая производственные данные!
Удаление файлов переноса еще больше усложняет процесс в рабочей среде. Я бы рекомендовал вам начать с проверки того, поддерживает ли Django управление таблицами вашей базы данных. По умолчанию это значение равно True, но обратите внимание, что если вы создали свои модели из существующей базы данных, возможно, с помощью команды inspectdb
, оно может быть установлено в значение False. Если значение False, для этой модели не будут выполняться операции создания, изменения или удаления таблиц базы данных. Вы хотите, чтобы это было правдой:
class MyModel(models.Model):
pass
class Meta:
managed = True
Вы также можете запустить python manage.py showmigrations
, чтобы проверить, присутствуют ли эти удаленные файлы в таблице django_migrations
и какие изменения были применены. Примененные миграции помечаются символом [X], затем выполняются команды python manage.py makemigrations <app_name>
, за которыми следуют команды python manage.py migrate
.
Если Django по-прежнему не обнаруживает изменений в ваших моделях после выполнения описанных выше действий, вы можете вручную воссоздать свои файлы миграции, используя флаг --empty, который выводит пустую миграцию для указанных приложений, например, вручную редактирование. Обратите внимание, что это предназначено для опытных пользователей и не должно использоваться, если вы не знакомы с форматом миграции, операциями миграции и зависимостями между вашими миграциями:
python manage.py makemigrations <app_name> --empty --name <migration_name>
Наконец, вы можете восстановить файлы миграции из своей системы управления версиями и применить изменения.