从外部获取一个django项目的所有model名称

不用启动运行django项目直接获取django项目的所有mode名称

1、cd到django项目的根目录下

2、终端输入python命令获取django的所有model名称

# 获取django的所有model的指令
python manage.py shell -c "from django.apps import apps; _list=list(); [_list.extend([f'{model.__name__}' for model in app.get_models()]) for app in apps.get_app_configs()]; print(_list)"

3、python脚本代码:

import os
import re
import subprocess

django_path = r"D:\project\django_project"  # django_project为项目名称,该路径为django项目根目录
os.chdir(django_path)
get_models_cmd = """python manage.py shell -c "from django.apps import apps; _list=list(); [_list.extend([f'{model.__name__}' for model in app.get_models()]) for app in apps.get_app_configs()]; print(_list)" """
result = subprocess.run(get_models_cmd, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, text=True)
out_content = result.stdout
print(out_content)
print(type(out_content))

pattern = r"'(.*?)'|\"(.*?)\""
# 使用 re.findall 提取所有匹配的内容
matches = re.findall(pattern, out_content)
# 提取每个匹配元组中的非空字符串
model_list = [match[0] if match[0] else match[1] for match in matches]

print(model_list)
print(type(model_list))

题外话:正则匹配获取一个类的名称

# 正则匹配获取一个类的名称
match =re.search(r'class\s+(\w+)\s*\(',obj_dt.django_models)
if match:
    table_model_name = match.group(1).strip()
posted @ 2024-11-30 10:52  二月雪  阅读(2)  评论(0编辑  收藏  举报