Через несколько дней без ответа я пошел дальше и нашел решение. Этот ответ 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.