Как сделать миграции после добавления поля?

Всем привет, добавил новые поля в модель, пытаюсь смигрировать их, выскакивает ошибка

django.db.utils.ProgrammingError: column "name" of relation "employees_employee" already exists

Пытался делать фейковую миграцию предпоследней миграции

python src/manage.py migrate --fake employees 0009_rename_socialaccount_socialnetwork

После этого делал обычную и получаю такую же ошибку что поле уже существует. Удалять все миграции не вариант. Подскажите как можно это решить?


Ответы (1 шт):

Автор решения: Necko

Скорее всего есть какая то не согласованность таблиц в БД и миграций Djnago. Django пытается создать поле, которое уже существует. Поэтому при создании миграции с новым полем нужно будет заменить (в файле новой миграции) AddField -> AlterField. Хочу предупредить, что несогласованность БД и миграцией в будущем может сильно мешать. Теоретически правильным решением будет, создать миграцию (makemigrations), которая создаст это поле, затем выполнить migrate --fake, затем создать ещё одну пустую миграцию, скопировать в неё код предыдущей миграции (с поправкой на dependenses, чтобы она ссылалась на прошлую миграцию) и заменить AddField -> AlterField.

→ Ссылка