网上很多关于django生成模型类关系图的文章,基本采用graphviz+pygraphviz/pydot的形式直接输出图片,而这两种结合也可以绘制更多的关系图,例如sklearn的决策树模型。要绘制模型类需要用到第三方应用,我们先来倒着说。
一、django_extensions
在Django中我们需要安装第三方应用django_extensions
pip install django_extensions
安装完成后,需要在django中注册
INSTALLED_APPS = [
...
'aaa.apps.AaaConfig',
'django_extensions',
]
# 此处注意模板类型应为原始模板
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
...
},
]
使用以下命令,进行图形绘制
# 绘制所有的模型类
python manage.py graph_models -a -o models.png
# 指定工具
python manage.py graph_models --pygraphviz -a -o models.png
python manage.py graph_models --pydot -a -o models.png
# 绘制指定app的模型类
python manage.py graph_models aaa -o aaa_models.png
# 输出为dot文件
python manage.py graph_models -a -o models.dot
# 使用dot命令进行转化
dot -Tpng models.dot > models.png
将模型类绘制成关系图,拿到新项目的时候,快速分析就方便多了
二、graphviz+pygraphviz/pydot
Linux
Linux下的安装很简单
sudo apt-get install graphviz
# 这个是pygraphviz的依赖,必须安装
sudo apt-get install graphviz libgraphviz-dev pkg-config
pip install pygraphviz
pip install pydot
python3.5环境亲测可以使用,以下为示例
import pygraphviz as pgv
A=pgv.AGraph(directed=True,strict=True)
A.add_edge(1,2)
A.add_edge(1,3)
A.add_edge(2,4)
A.add_edge(2,5)
A.add_edge(5,6)
A.add_edge(5,7)
A.add_edge(3,8)
A.add_edge(3,9)
A.add_edge(8,10)
A.add_edge(8,11)
A.graph_attr['epsilon']='0.001'
print(A.string()) # print dot file to standard output
A.write('fooOld.dot')
A.layout('dot') # layout with dot
A.draw('fooOld.png') # write to file
Windows10
在win10环境下的安装复杂些,因为graphviz官网是32位版本、pygraphviz不支持py3.4以上版本、c编译错误等等问题,安装过程会出现各种不可预期的错误。
pygraphviz在windows10下的成功解决
在这篇文章中介绍了win10下graphviz和pygraphvi的解决方法,亲测py3.6有效,对于特别需要使用pygraphviz的童鞋可以费劲去试着走一下。
如果只是想要输出模型类关系图的童鞋,注意!我们没必要使用这个完全体,因为graph_models方法可以单独输出.dot文件,完全可以使用graphviz32位将.dot格式转化为PNG或者EPS等等格式
所以使用django_extensions + graphviz:
我们只需要安装graphviz(因为网上的链接下载速度都巨慢,这里附一个下载链接,速度很快),然后将其bin目录添加到环境变量PATH中就OK 。
用文章开头的命令使用grah_models输出为.dot文件,然后使用dot命令将其转化为PNG图片。