Изменения, обнаруженные после сквошмиграции

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 покажет «Изменений не обнаружено»

Так что же произошло? Что могло вызвать эту странную ситуацию? Как я могу это исправить?

Вы можете «вручную» подавить миграции, путем

  1. очистить историю миграции

    python manage.py migrate --fake myapp zero
    
  2. Удалите файлы миграции

    rm django/myapp/migrations/*.py
    
  3. Сделайте новые файлы миграции (будет только один, это будет новый начальный файл миграции)

    python manage.py makemigrations
    
  4. И мигрируйте на него

    python manage.py migrate --fake-initial
    

Причина --fake и --fake-initial в том, чтобы предотвратить обновление базы данных во время этого процесса.

Вернуться на верх