Изменения, обнаруженные после сквошмиграции
python manage.py showmigrations
показывает:
mainapp
[X] 0001_initial
...
[X] 0240_employer_data
[X] 0241_person_metadata
[X] 0242_personemployer_employerworkplace
[X] 0243_personemployer_employed_personemployer_stage
[X] 0244_remove_employerworkplace_and_more
Я побежал:
python manage.py squashmigrations mainapp 0244
и теперь showmigrations
показывает:
mainapp
[-] 0001_squashed_0244_remove_employerworkplace_and_more (244 squashed migrations) Run 'manage.py migrate' to finish recording.
Но python manage.py migrate
сообщает об ошибках:
No migrations to apply.
Your models in app(s): 'mainapp' have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
Как можно обнаружить изменения сразу после запуска squashmigrations
, ничего не делая между этим?
python manage.py makemigrations --dry-run
показывает множество строк «Alter field», таких как
Migrations for 'mainapp':
mainapp/migrations/0001_squashed_0244_remove_employerworkplace_and_more.py
~ Alter field field on employergroup
~ Alter field image_alt on employee
~ Alter field context on employer
...
Я ожидал бы, что после выполнения squashmigrations
, makemigrations
покажет «Изменений не обнаружено»
Так что же произошло? Что могло вызвать эту странную ситуацию? Как я могу это исправить?
Вы можете «вручную» подавить миграции, путем
очистить историю миграции
python manage.py migrate --fake myapp zero
Удалите файлы миграции
rm django/myapp/migrations/*.py
Сделайте новые файлы миграции (будет только один, это будет новый начальный файл миграции)
python manage.py makemigrations
И мигрируйте на него
python manage.py migrate --fake-initial
Причина --fake
и --fake-initial
в том, чтобы предотвратить обновление базы данных во время этого процесса.