Пред.история:
Добавил я как то модель в своё app.
Мигрировал на тестовый сервер(но почему то не проверял)
Потом сделал миграцию на основной сервер, там все прекрасно работало.
Прошло время, мне пришлось вернуться к этой модели на тестовый сервер.
Я удивился, когда обнаружил, что данной модели нет в бд.
Мои действия:
Не долго думая, я решил, что сбросить миграции будет хорошим способом.
Я удалил все файлы из app-migrations
Я удалил все строки из бд django_migrations
По новой запустил makemigrations
Затем migrate, на что был ответ: django.db.utils.ProgrammingError: relation "тут_типа_модель_которыя_уже_есть_в_бд" already exists
Прогуглил, сказано сделать "ФакАп": migrate --fake app
Я сделал (Applying app.0001_initial... FAKED)
, не сработало.
Еще были советы сделать syncdb, но это тоже чего то совсем не работает.
migrate app 0001 тоже не то.
До этого, когда бд была почти пуста, я спокойно удалял миграции и чистил бд, затем снова делал миграции и все было норм.
Сейчас у меня очень большой объем бд, и все делать заново не очень охото (даже просто экспортировать, а потом импортировать).
Вопрос:
Как сделать изначальную миграцию (0001_initial), для уже существующей бд, после удаления всех миграций и сделав makemigrations как будто впервые.
Чтобы откатить все миграции в приложении, надо сделать так: migrate app_name zero
Потом применить их снова: migrate app_name
Если миграции менялись, но не откатывались заранее - могут возникнуть проблемы: придется удалять таблицу вручную и применять все миграции к приложению заново. А если и initial файл изменился, то и на двух серверах тоже.
А migrate --fake app_name - это просто запись в django_migrations, не больше
И да, не надо каждый раз пересоздавать миграции - сам себе проблем только наживешь: там одни миграции, там другие, там откатывал, там не откатывал.
Даниил Чернов, разные миграции или разные базы. Сравниваешь миграции. Если одинаковые - идешь в базу, смотришь таблицы, смотришь django_migrations и делаешь выводы, что не так