Павел, я внимательно прочитал инструкцию по вышеуказанным ссылкам (в очередной раз по вашему совету).
Вот в инструкции есть важное замечание:
После того, как миграция отработала, добавьте миграции и изменения к
моделям в одном коммите - таким образом, когда другие разработчики
(или на “боевом” сервере) обновят код, они получат как изменения ваших
моделей, так и миграции для них.
Ну так я вроде так и делаю. Беру аппликэйшн вместе со всеми миграциями и переношу все это на продакшн. А там пытаюсь сделать migrate и получаю ошибку table exist. Использование migrate вместе с ключом --fake-initial не делает нужных изменений в базе, например, если добавлялись какие-либо модели или изменялись существующие.
Вот еще пример из того же документа
Зависимости
В то время как миграция находятся в контексте одного приложения,
таблицы и зависимости, определенные вашими моделями, обычно намного
сложнее, и могут работать не только с одним приложением. Когда вы
делаете миграцию, которая требует что-то ещё для запуска - например,
вы добавляете ForeignKey в вашем books приложении на приложение
authors - в результате миграция будет содержать зависимость от
миграции в authors.
Это означает, что при запуске миграций, сначала применяются миграции
приложения authors, создаётся таблица, на которую ссылается
ForeignKey, и затем миграция, которая создаёт ForeignKey. Иначе
миграция попыталась бы создать ForeignKey на таблицу, которая может
ещё не существовать, и мы получили бы ошибку.
Это где-то очень близко к моей проблеме. Но действительно правильно ведь написано о том что сначала пытается примениться миграция authors, а затем уже миграция которая создает ForeignKey. Но ведь миграция authors не может примениться, т.к. таблица-то уже существует! И как мы понимаем (или я не правильно понимаю?) использование --fake-initial даст нам определнно совсем не тот результат который мы ожидаем (добавление в таблицу ForeignKey)
И вот мы подошли к тому что возможно нас спасет:
При запуске migrate с опцией --fake-initial начальные миграция
выполняются по особенному. Если создаются таблицы (операция
CreateModel), Django проверит наличие таблиц в базе данных, и пометит
миграцию выполненной, если таблицы найдены. Аналогично при добавлении
полей (операция AddField), Django проверит наличие полей. Без опции
--fake-initial начальные миграции выполняются как и обычные.
Но нет, после переноса файлов аппликэйшена вместе с папкой миграций, пи выполнении на боевом сервере migrate --fake-initial получаем следующую ошибку: Cannot add or update a child row: a foreign key constraint fails
Поверьте, я не из тех кто не читает документацию перед тем как что-то написать. Я могу не понимать прочитанного или понимать не правильно, но не читать просто не могу себе позволить.
Павел, спасибо за ваш ответ. Буду очень рад если изложите свои мысли по поводу того как нужно правильно действовать.