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!