Muitas vezes pegamos o bonde andando em alguns projetos Django e isso causa, a princípio, uma bagunça na cabeça. Geralmente, vamos batendo cabeça pra entender o projeto. Gastamos tempo analisando como os módulos estão oragnizados e como os modelos se relacionam.
Não são todos os projetos que possuem um diagrama de classes atualizados, condizentes com o estado atual do banco de dados. Para estes casos, os que não possuem o diagrama, existe uma lib que gera essa imagem do diagrama para a gente. É o Graph Models da lib django-extensions.
A lib django-extensions é bastante utilizada no desenvolvimento com o Django. Basicamente ela acrescenta comandos que o manage.py pode executar para a gente. Um desses comandos, é o graph_models, onde conseguimos gerar um arquivo de imagem com o diagrama de classes do seus arquivos de models.py.
Instalação
Primeiro, você tem que instalar o django-extensions.
pip install django-extensions
Após isso, você tem que incluir o módulo django_extensions na sua lista de INSTALLED_APPS.
INSTALLED_APPS = (
...
'django_extensions',
)
Após isso, você "desbloqueou" um monte de comando novo para o arquivo de manage.py. É só digitar, com o virtualenv ativado, o seguinte comando e você verá a lista de comandos disponíveis:
python manage.py --help
E os comandos liberados:
Entratanto, para que o comando graph_models funcione normalmente, é preciso que você instale a biblioteca graphviz no seu sistema operacional.
Para Linux:
sudo apt install python3-dev graphviz libgraphviz-dev pkg-config
No MacOS:
brew install graphviz
Após isso, precisamos instalar o driver que vai fazer a ponte entre o nosso projeto Django e o graphviz:
pip install pygraphviz
Na documentação do módulo graph_models, os autores alertam que, se você enfrentar algum erro ao instalar o pygraphviz, você pode tentar outro método alternativo, utilizando o pydot para exportar os arquivos.
Caso você enfrente o problema descrito acima, que eu acho bem difícil de acontecer, tente instalar esses pacotes:
pip install pyparsing pydot
Configuração do graph_models
Você pode adicionar a seguinte configuração no seu arquivo de settings.py:
GRAPH_MODELS = {
'all_applications': True,
'group_models': True,
}
As opções são auto explicativas! São as opções que o graph_models vai gerar o grafo/diagrama de classe.
Gerando o diagrama
Você pode gerar o diagrama com o seguinte comando (utilizando o driver do pygraphviz):
python manage.py graph_models --pygraphviz -a -g -o meu_diagrama.png
E caso vcê esteja usando o pydot, é só trocar o --pygraphviz por --pydot.
Ao final, ele vai gerar a imagem que representa o diagrama de classe do seu projeto Django. Esse processo de gerar a imagem pode demorar ou não. Vai depender do tamanho do seu projeto.
Aqui é o diagrama de um projeto que monitora se meus sites estão no ar, que utiliza o celery por debaixo dos panos:
Você também pode gerar o diagrama somente para os models que você quiser, incluindo ou excluindo classes. Tá tudo na documentação que eu mandei lá em cima.
Foto da capa by Campaign Creators on Unsplash