django 模型 markdown快速输出
抄的大佬的代码再自己修改,输出项目数据库设计文档
直接上代码
#-*- coding: UTF-8 -*-
#Desc :将模型打印为MarkDown文件,作为项目数据库设计文档
#使用说明: 配置 model_dict,project_name两个参数
import os
import sys
import time
import django
#引入环境
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "forest_monitor.settings")
django.setup()
#引入模型
from user_profile.models import *
def magic_doc():
files_text = list()
#按模块整理模型
model_dict={
'用户模块':[ProvinceThreeLevel, UserProfile, UserToken, UserLogging],
'模块2':[NewDiffPolygon, ChangeReason, GeneratePolygon, PolygonInvestImages],
'模块3':[ForestResource,],
'模块4':[],
}
#项目名称
project_name='项目名称'
files_text.append('# %s数据库设计'%(project_name,))
files_text.append('- 文档时间: %s'%(time.strftime('%Y-%m-%d'),))
files_text.append('## 引言')
files_text.append('### 关于 ')
files_text.append(' 此文档主要介绍%s数据库定义。'%(project_name,))
files_text.append('### 目标读者 ')
files_text.append(' 此文档提供给软件开发人员和系统维护人员使用。')
files_text.append('### 术语定义')
files_text.append('### 参考资料')
files_text.append('## 数据库设计')
# template = dict()
for app,models in model_dict.items():
files_text.append('### %s'%(app,))
for target_cls in models:
model_key = '%s' % (target_cls._meta.verbose_name, )
fields = dict()
for field in target_cls._meta.fields:
if type(field).__name__ == 'ForeignKey':
f_name = field.name + "_id"
else:
f_name = field.name
if f_name not in fields.keys():
fields[f_name] = dict()
fields[f_name].update(field.__dict__)
fields[f_name]['field_type'] = str(type(field).__name__)
files_text.append("#### %s" % (model_key,))
files_text.append("- 表名: %s" % (target_cls.__name__,))
files_text.append("\n")
files_text.append("|字段|中文|数据类型|空|默认值|字段类型|备注|")
files_text.append("|-|-|-|:-:|:-:|:-:|-|")
for (k, v) in fields.items():
is_main_key = is_for_key = False
if 'NOT_PROVIDED' in str(v['default']):
v['default'] = ''
if v['choices'] == None:
v['choices'] = ''
if v['primary_key'] is True:
is_main_key = True
if v['field_type'] == 'ForeignKey':
is_for_key = True
key_types = list()
if is_main_key:
key_types.append("主键")
if is_for_key:
key_types.append("外键")
v['primary_key'] = ','.join(key_types)
args = list()
for tag in ['name', 'verbose_name', 'field_type', 'null', 'default', 'primary_key', 'choices']:
args.append(str(v[tag]))
data = '|%s|' % '|'.join(args)
files_text.append(data)
files_text.append("\n\n")
return files_text
if __name__ == '__main__':
txt = magic_doc()
with open('./magic_model_markdown.md', 'w', encoding='utf-8') as fw:
fw.write('\n'.join(txt))