Visualizando migrations dependentes com django-migrations-graph

Quando trabalhos em projetos Django, a partir do momento em que ele sofre inúmeras mudanças, acabamos usando as migrations para que o banco possa refletir as alterações. Com o tempo, a quantidade delas aumenta, e não sabemos exatamente qual módulo de migração depende de outra. Para resolver esse problema, foi criado o django-migrations-graph.

O objetivo ele é dar uma opção via management command, para que ele acesse as migrações e defina no terminal as dependências entre elas. Então vamos começar a usar.

Instalação

Antes de mais nada, vamos preparar um ambiente virtualenv e criar um projeto de exemplo:

$ python3 -m venv .venv
$ pip install django
$ django-admin startproject graph_example .

Depois, vamos instalar o pacote e inserir o aplicativo no INSTALLED_APPS do projeto:

$ pip install django-migrations-graph
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # Third Apps
    'migraph',
]

Instalado e configurado, vamos aproveitar os apps contrib para verificar a dependência entre contrib.auth e contrib.admin:

$ python manage.py migration_dependencies auth admin
[auth]
auth/0001_initial
        Depending:
                admin/0001_initial
        Depends on:
                contenttypes/__first__
auth/0002_alter_permission_name_max_length
auth/0003_alter_user_email_max_length
auth/0004_alter_user_username_opts
auth/0005_alter_user_last_login_null
auth/0006_require_contenttypes_0002
        Depends on:
                contenttypes/0002_remove_content_type_name
auth/0007_alter_validators_add_error_messages
auth/0008_alter_user_username_max_length

[admin]
admin/0001_initial
        Depends on:
                auth/__first__
                contenttypes/__first__
admin/0002_logentry_remove_auto_add

É muito interessante! Vendo a saída, ao passarmos os aplicativos para efetuar a introspecção das migrações, ele mostra acima que o auth/0001initial depente do 0001_initial do _contrib.admin, e que este depende de vários outros do contrib.contenttypes. Vemos também que em cada app ele separa por [nome do app].

Esse app vai ajudar muito quando precisa trabalhar em projetos que ainda não conhece como um todo, aprender mais das migrações, como foram feitas e suas dependências.

Espero que tenham gostado. Até mais!