Как определить, являются ли миграции обратимыми? - PullRequest
0 голосов
/ 31 мая 2018

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

Однако не все миграции обратимы.Как сделать так, чтобы автоматизированный процесс обнаружил, все ли необходимые миграции обратимы перед их применением?

1 Ответ

0 голосов
/ 03 июня 2018

Через несколько дней без ответа я пошел дальше и нашел решение. Этот ответ SO был хорошей отправной точкой.

from django.db.migrations.executor import MigrationExecutor
from django.db import connections, DEFAULT_DB_ALIAS

def are_migrations_reversible(target_migrations, database=DEFAULT_DB_ALIAS):
    """check if all migrations required to reach the target migrations are reversible

    `target_migrations` is an iterable of (app_label, migration_name) 2-tuples.
    """
    connection = connections[database]
    connection.prepare_database()
    executor = MigrationExecutor(connection)
    migration_plan = executor.migration_plan(list(target_migrations))

    return all(
        operation.reversible
        for (migration, is_backwards) in migration_plan
        for operation in migration.operations
    )

Вышеприведенное требует определения целевых миграций, которые можно легко извлечь из вывода команды управления showmigrations, илис некоторыми усилиями по дальнейшему использованию внутреннего кода миграции Django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...