erknrio
3/23/2017 - 11:07 AM

Django graph models. Imagen modelos.

Django graph models. Imagen modelos.

Introducción

Vamos a sacar una imagen de la base de datos de django que estemos usando.

Versiones Django

Probado en Django 1.9, 1.10 y 1.11.

Requisitos previos

Encontramos dos métodos de hacerlo, mediante pip o también con apt. Pero antes los pasos comunes a ambos métodos.

Pasos comunes

Debemos empezar instalando las extensiones de django y agregándolas a nuestras installed apps.

Dentro de nuestro virutalenv o en el sistema. Ojo que para python3 podrías tener que escribir pip3 en lugar de pip:

pip install django-extensions

En nuestro settings.py de django le agregamos la siguiente línea:

INSTALLED_APPS = [
  # Otras apps
  # La nueva
  'django_extensions',
]

Método 1: solo pip

Python 2

Si hasta aquí ha ido bien puedes seguir estas instrucciones.

  • Usando pygraphviz:
pip install pygraphviz
  • Si no te funciona y pruebas con pydot:
pip install pyparsing==1.5.7
pip install pydot

Python 3

El paquete pip por defecto quizás no te funcione y debas especificar una versión compatible.

  • Usando pygraphviz:
pip install pygraphviz==1.4rc1

En este enlace tienes la información al respecto.

Aquí a su github pages

  • Si no te funciona y pruebas con pydot:
pip install pyparsing
pip install pydot

Método 2: apt + pip

Si con pip exclusivamente no te ha funcionado quizás te interese esta opción.

Vamos a instalar graphviz mediante el gestor de paquetes, en este ejemplo usamos Ubuntu 16.04.

Usando apt:

sudo apt install graphviz graphviz-dev

Ahora instalamos pygraphviz mediante pip. Revisa el método 1.

Si usamos virtualenv

Debemos generar el entorno con virtualenv virtualenv --system-site-packages de manera que así usa los paquetes instalados en el sistema en lugar de descargarlos de cero. Recuerda especificar la versión de python si usas pyton3. Puedes hacer así: virtualenv virtualenv --system-site-packages --python=python3.

Ejemplos de uso

Estos son los ejemplos oficiales que también te pongo a continuación por si cambia la ruta:

Crear fichero dot:

Create a dot file
$ ./manage.py graph_models -a > my_project.dot

Crear imagen png con agrupación de aplicación:

# Create a PNG image file called my_project_visualized.png with application grouping
$ ./manage.py graph_models -a -g -o my_project_visualized.png

Mismo ejemplo anterior pero especificando la librería a emplear:

# Same example but with explicit selection of pygraphviz or pydot
$ ./manage.py graph_models --pygraphviz -a -g -o my_project_visualized.png
$ ./manage.py graph_models --pydot -a -g -o my_project_visualized.png

Crear una imagen png solamente de las aplicaciones "foo" y "bar" del proyecto:

# Create a graph for only certain models
$ ./manage.py graph_models -a -I Foo,Bar -o my_project_subsystem.png

Crear un fichero dot solamente de las aplicaciones "foo" y "bar" del proyecto:

# Create a dot file for only the 'foo' and 'bar' applications of your project
$ ./manage.py graph_models foo bar > my_project.dot

Enjoy!