Generar diagramas de clases a partir de modelos de Django
Este post fue migrado de un blog hecho con Wordpress. Si se ve mal, dejame un comentario y lo arreglo.
La siguiente es la mejor forma que encontré de tomar todos los archivos models.py de las aplicaciones que componen un proyecto Django y generar un diagrama de clases completo, listo para exportar cómo imagen. Utilizo un comando incluido en django-command-extensions.
Obtener e instalar django-extensions
Para Django 1.0 hay que bajar la última versión del svn:
svn checkout http://django-command-extensions.googlecode.com/svn/trunk/ django-command-extensions
E instalarlo ejecutando el script de instalación:
cd django-command-extensions
sudo python setup.py install
Podemos probar si se instaló correctamente abriendo una consola Python y ejecutando:
>>> import django_extensions
Para que este disponible en nuestro proyecto debemos agregar la aplicación a settings.py
:
INSTALLED_APPS = (
...
'django_extensions'
)
Cuando ejecutemos:
python manage.py help
veremos una lista de los nuevos comandos disponibles.
Generar archivo .dot
Uno de ellos es graph_models el cual nos permitirá generar un archivo en formato .dot:
python manage.py graph_models -a > mi_proyecto.dot
Generar archivo .png
O una imagen png:
python manage.py graph_models -a -g -o mi_proyecto.png
Para que el anterior comando funcione, necesitamos tener instalado pygraphviz. En mi Ubuntu no tenía el paquete python-pygraphviz por lo que tuve que bajarlo desde su página web. Para instalarlo requiere tener instalados los paquetes graphviz y graphviz-dev.
Ejemplo
El siguiente comando genera el diagrama de clases para auth, la popular aplicación que viene con Django y sirve como ejemplo de cómo generar el diagrama para solo una aplicación del proyecto:
python manage.py graph_models auth -g -o mi_proyecto_auth.png
Nota
Les recomiendo bajar la versión de pygraphviz empaquetada de Cheeseshop en lugar de la del svn, ya que con esta el comando de django-extensions lanza una excepción. Correguí el programa, abrí un ticket y envié un parche. Para cuando leas esto probablemente ya se haya incorporado a trunk.
Comentarios
Comments powered by Disqus