Откат миграций

Команда undo_migration откатывает указанную миграцию и все более поздние миграции, которые уже были применены после нее.

Команда

uv run manage.py undo_migration --name <migration_name>

Используйте команду только для осознанного отката конкретной точки истории. Без имени миграции команда не работает.

По умолчанию: Команда начинает откат указанной миграции и всех более поздних зависимых миграций.

Параметры

Параметр Описание
--name, -n Имя миграции без расширения .py.

Дополнительные примеры запуска

Откатить миграцию сервиса

uv run manage.py undo_migration --name 002_mcms_remotes

Команда найдет целевую миграцию в таблице истории, затем проверит, есть ли поверх нее более поздние применения.

Откатить миграцию сабмодуля

uv run manage.py undo_migration --name 015_actor_permaction

Подходит для отладки изменений в самом auth_perms, если файл с таким именем уже был применен в базе.

Как работает

  1. Проверяет, что имя передано и что такая миграция действительно присутствует в таблице migrations.
  2. Собирает общий список миграций, находит целевой модуль и вычисляет все более поздние миграции, которые были применены после него.
  3. Перед откатом выводит список зависимых файлов и интерактивно спрашивает подтверждение продолжения.
  4. Если подтверждение получено, откатывает более поздние миграции в обратном порядке, затем откатывает целевую миграцию через backward_migration(...).

Что важно учесть

  • Команда интерактивная: без подтверждения цепочка отката не будет выполнена.
  • Dry-run режима нет, поэтому для рабочих баз откат стоит сопровождать резервной копией.
  • Имя должно уже присутствовать в истории применений. Если файл есть на диске, но не был применен, откат не начнется.
  • Как и у migrate, корректность отката зависит от структуры класса Migration и наличия backwards_query.