Почему Django не видит миграции?
Я пытаюсь изменить некоторые имена полей в моделях Django, но по некоторым причинам Django не хочет видеть мои миграции. Я убедился, что следующие вещи настроены правильно:
myApp.apps.MyAppConfigдобавляется кINSTALLED_APPSв settings.py- В папке myApp присутствует папка migration с пустым
__init__.py - В папке myApp у меня также есть пустая папка
__init__.py
Вся процедура прекрасно работает локально с базой данных SQLite, и я могу изменять имена полей и запускать python manage.py makemigrations и python manage.py migrate для миграции базы данных. Однако на производстве, где я использую Docker Compose для оркестровки и Postgres в качестве базы данных, только первая миграция работает нормально. После этого, когда я изменяю имя любого поля модели и пытаюсь выполнить docker-compose exec projectname django-admin makemigrations или docker-compose exec projectname python manage.py makemigrations или добавить имя приложения за этими командами, ничего не помогает.
Тогда Postgres не может обработать запрос, потому что не знает имя нового поля:
2022-03-11 14:40:22.136 UTC [81] ERROR: column model_name.new_field_name does not exist at character 357
Что я здесь упускаю? Как я могу заставить Django мигрировать?
У меня были те же проблемы при использовании контроля версий для отправки изменений в другую среду.
Что вероятно происходит, так это то, что django считает, что он уже сделал миграцию, из-за информации, которая передается, когда вы продвигаете эти изменения. Что вам нужно сделать, так это исправить это поведение, вручную удалив эти миграции или, если вам пока не нужно хранить информацию, принудительно выполнить миграцию с самого начала.
Вы можете прочитать документы для дальнейшего использования, и я использовал ответы в этом вопросе для решения той же проблемы.
В конце концов я смог решить эту проблему, добавив том Docker для папки migrations. Я полагаю, что многие люди помещают весь свой код в постоянный том, что также предотвратило бы эту проблему. Однако, по крайней мере, всему, что должно быть постоянным (очевидно), нужен постоянный том.