Django 提供第三方包 django-extensions,可以用来将 Django 中的 Models 生成 E-R 图。
pip install django-extensions
在 Django settings.py 文件, INSTALLED_APPS 中添加 django_extensions
- INSTALLED_APPS = (
- 'django_extensions',
- )
python manage.py graph_models -a > all.dot
django_view_permission 为例) 生成 dot 文件python manage.py graph_models django_view_permission > django_view_permission.dot
导出的 dot 内容如下:django_view_permission.dot
- digraph model_graph {
- // Dotfile by Django-Extensions graph_models
- // Created: 2018-03-03 14:55
- // Cli Options: django_view_permission
-
- fontname = "Helvetica"
- fontsize = 8
- splines = true
-
- node [
- fontname = "Helvetica"
- fontsize = 8
- shape = "plaintext"
- ]
-
- edge [
- fontname = "Helvetica"
- fontsize = 8
- ]
-
- // Labels
-
- django_view_permission_models_CommonElement [label=<
-
"palegoldenrod" BORDER="0" CELLBORDER="0" CELLSPACING="0">-
"2" CELLPADDING="4" ALIGN="CENTER" BGCOLOR="olivedrab4">- "Helvetica Bold" COLOR="white">
- CommonElement
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica ">create_time
-
"LEFT">- "#7B7B7B" FACE="Helvetica ">DateTimeField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica ">doc
-
"LEFT">- "#7B7B7B" FACE="Helvetica ">TextField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica ">update_time
-
"LEFT">- "#7B7B7B" FACE="Helvetica ">DateTimeField
-
-
-
- >]
-
- django_view_permission_models_View [label=<
-
"palegoldenrod" BORDER="0" CELLBORDER="0" CELLSPACING="0">-
"2" CELLPADDING="4" ALIGN="CENTER" BGCOLOR="olivedrab4">- "Helvetica Bold" COLOR="white">
- View
<"Helvetica Italic">CommonElement> -
-
-
"LEFT" BORDER="0">- "Helvetica Bold">id
-
"LEFT">- "Helvetica Bold">AutoField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica Italic">create_time
-
"LEFT">- "#7B7B7B" FACE="Helvetica Italic">DateTimeField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica Italic">doc
-
"LEFT">- "#7B7B7B" FACE="Helvetica Italic">TextField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica ">func
-
"LEFT">- "#7B7B7B" FACE="Helvetica ">CharField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica ">module
-
"LEFT">- "#7B7B7B" FACE="Helvetica ">CharField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica ">name
-
"LEFT">- "#7B7B7B" FACE="Helvetica ">CharField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica Italic">update_time
-
"LEFT">- "#7B7B7B" FACE="Helvetica Italic">DateTimeField
-
-
-
- >]
-
- django_view_permission_models_ViewSet [label=<
-
"palegoldenrod" BORDER="0" CELLBORDER="0" CELLSPACING="0">-
"2" CELLPADDING="4" ALIGN="CENTER" BGCOLOR="olivedrab4">- "Helvetica Bold" COLOR="white">
- ViewSet
<"Helvetica Italic">CommonElement> -
-
-
"LEFT" BORDER="0">- "Helvetica Bold">id
-
"LEFT">- "Helvetica Bold">AutoField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica Italic">create_time
-
"LEFT">- "#7B7B7B" FACE="Helvetica Italic">DateTimeField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica Italic">doc
-
"LEFT">- "#7B7B7B" FACE="Helvetica Italic">TextField
-
-
-
"LEFT" BORDER="0">- "Helvetica ">name
-
"LEFT">- "Helvetica ">CharField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica Italic">update_time
-
"LEFT">- "#7B7B7B" FACE="Helvetica Italic">DateTimeField
-
-
-
- >]
-
- django_view_permission_models_ViewPermission [label=<
-
"palegoldenrod" BORDER="0" CELLBORDER="0" CELLSPACING="0">-
"2" CELLPADDING="4" ALIGN="CENTER" BGCOLOR="olivedrab4">- "Helvetica Bold" COLOR="white">
- ViewPermission
<"Helvetica Italic">CommonElement> -
-
-
"LEFT" BORDER="0">- "Helvetica Bold">id
-
"LEFT">- "Helvetica Bold">AutoField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica Italic">create_time
-
"LEFT">- "#7B7B7B" FACE="Helvetica Italic">DateTimeField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica Italic">doc
-
"LEFT">- "#7B7B7B" FACE="Helvetica Italic">TextField
-
-
-
"LEFT" BORDER="0">- "#7B7B7B" FACE="Helvetica Italic">update_time
-
"LEFT">- "#7B7B7B" FACE="Helvetica Italic">DateTimeField
-
-
-
- >]
- // Relations
-
- django_view_permission_models_View -> django_view_permission_models_CommonElement
- [label="abstract\ninheritance"] [arrowhead=empty, arrowtail=none, dir=both];
-
- django_view_permission_models_ViewSet -> django_view_permission_models_View
- [label="views (viewset)"] [arrowhead=dot arrowtail=dot, dir=both];
-
- django_view_permission_models_ViewSet -> django_view_permission_models_CommonElement
- [label="abstract\ninheritance"] [arrowhead=empty, arrowtail=none, dir=both];
- account_models_BkUser [label=<
-
"palegoldenrod" BORDER="0" CELLBORDER="0" CELLSPACING="0">-
"2" CELLPADDING="4" ALIGN="CENTER" BGCOLOR="olivedrab4">- "Helvetica Bold" COLOR="white">BkUser
-
-
- >]
- django_view_permission_models_ViewPermission -> account_models_BkUser
- [label="users (viewpermission)"] [arrowhead=dot arrowtail=dot, dir=both];
-
- django_view_permission_models_ViewPermission -> django_view_permission_models_View
- [label="views (viewpermission)"] [arrowhead=dot arrowtail=dot, dir=both];
-
- django_view_permission_models_ViewPermission -> django_view_permission_models_ViewSet
- [label="views_set (viewpermission)"] [arrowhead=dot arrowtail=dot, dir=both];
-
- django_view_permission_models_ViewPermission -> django_view_permission_models_CommonElement
- [label="abstract\ninheritance"] [arrowhead=empty, arrowtail=none, dir=both];
- }
生成后的文件我没有找到在哪里,就自己建了同名的文件,输入了控制台输出的内容
如果有知道的,欢迎评论区告诉我,或者私信我,不胜感谢
由于生成的是 dot 格式的图片描述文件,需要使用工具进行转换成常用的 PNG 格式图片。可以下载 graphviz ,并将 /bin/dot.exe 加入系统 PATH 中(安装的时候有添加环境变量提示,勾选即可)。
dot -Tpng django_view_permission.dot > django_view_permission.png
字体默认是 Roboto,可以换成其他的字体