django 模型 markdown快速输出

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))

效果图:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值