Как откатить нелинейные миграции в django?

Предположим, у меня есть следующие миграции в Django.

    X
  /   \
 A      B      [A and B can represent any number of linear migrations.] 
  \   /
    Y (merge migration).

Как я могу откатить только B и Y? А A оставить как есть.

    X(*)      [* represent migration has been applied.]
  /   \
 A(*)   B(*)  [A and B can represent any number of linear migrations.] 
  \   /
    Y(*)      (merge migration) 

Шаги для неприменения только одного пути, т.е. B и Y

  1. Применяйте только Y. Выполняя python manage.py migrate app B (or A; both works).

       X(*)     
     /    \
    A(*)   B(*) 
     \    /
       Y()   
    
  2. Удалите на время файлы миграции A и Y из местоположения проекта.

      X(*)     
       \
        B(*) 
    
  3. Теперь отмените применение B, выполнив python manage.py migrate app X.

      X(*)     
       \
        B() 
    
  4. Верните файлы миграции A и Y в исходное место. Теперь вы можете спокойно удалить непримененные миграции B и Y, если хотите.

      X(*)     
     /   \
    A(*)  B() 
     \   /
       Y()   
    

Суть в том, что django может откатить миграции, только если файлы присутствуют в локации. Если вы не хотите откатывать путь миграции (т.е. A здесь), удалите его из расположения проекта при выполнении отката.

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