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>

Наконец, вы можете восстановить файлы миграции из своей системы управления версиями и применить изменения.

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