From 50b480f19f6b6b2583a553047ac398411a02bdae Mon Sep 17 00:00:00 2001 From: "wskaudh@qq.com" Date: Wed, 29 May 2024 12:13:31 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=AF=B9=E5=90=8E=E7=AB=AF=E7=9A=84get=5Fm?= =?UTF-8?q?odel=5Ffrom=5Fapp=E5=87=BD=E6=95=B0=E8=BF=9B=E8=A1=8C=E9=87=8D?= =?UTF-8?q?=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/utils/models.py | 73 +++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 18 deletions(-) diff --git a/backend/dvadmin/utils/models.py b/backend/dvadmin/utils/models.py index fb0c2ba7..aa260bc6 100644 --- a/backend/dvadmin/utils/models.py +++ b/backend/dvadmin/utils/models.py @@ -114,28 +114,65 @@ def get_all_models_objects(model_name=None): return settings.ALL_MODELS_OBJECTS or {} +from django.apps import apps +import importlib +import pkgutil +import inspect + +def find_modules(app_module): + """ + 递归查找给定模块及其子模块 + """ + modules = None + for _, submodule_name, is_pkg in pkgutil.iter_modules(app_module.__path__): + full_module_name = f"{app_module.__name__}.{submodule_name}" + submodule = importlib.import_module(full_module_name) + modules.append(submodule) + if is_pkg: + modules.extend(find_modules(submodule)) + return modules + + def get_model_from_app(app_name): """获取模型里的字段""" - model_module = import_module(app_name + '.models') - filter_model = [ - getattr(model_module, item) for item in dir(model_module) - if item != 'CoreModel' and issubclass(getattr(model_module, item).__class__, models.base.ModelBase) - ] + model_list = [] - for model in filter_model: - if model.__name__ == 'AbstractUser': - continue - fields = [ - {'title': field.verbose_name, 'name': field.name, 'object': field} - for field in model._meta.fields + + try: + # 注释编号:django-vue3-admin-models111112 + # 功能说明:因为model.py文件不在对应的app根目录,所以必须要使用如下方法拿到models + app_config = apps.get_app_config(app_name) + model_module_dict = app_config.models + filter_model = [] + if bool(model_module_dict): # 判断是否为空 + for model_name, model_class in model_module_dict.items(): + filter_model.append(model_class) + # 注释编号:django-vue3-admin-models111112 + except Exception as e: + #注释编号: django-vue3-admin-models280912:如果上面的代码出现错误,那只能使用如下方法进行导入model了,这种方法是当前的model.py文件在对应的apps.py根目录下才行的 + model_module = import_module(app_name + '.models') + filter_model = [ + getattr(model_module, item) for item in dir(model_module) + if item != 'CoreModel' and issubclass(getattr(model_module, item).__class__, models.base.ModelBase) ] - model_list.append({ - 'app': app_name, - 'verbose': model._meta.verbose_name, - 'model': model.__name__, - 'object': model, - 'fields': fields - }) + + + if bool(filter_model): # 判断是否为空 + for model in filter_model: + if model.__name__ == 'AbstractUser': + continue + fields = [ + {'title': field.verbose_name, 'name': field.name, 'object': field} + for field in model._meta.fields + ] + model_list.append({ + 'app': app_name, + 'verbose': model._meta.verbose_name, + 'model': model.__name__, + 'object': model, + 'fields': fields + }) + return model_list -- Gitee From b6b12071f1decaac85006bda7bb43b905c94a2ea Mon Sep 17 00:00:00 2001 From: "wskaudh@qq.com" Date: Thu, 30 May 2024 11:34:10 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=9C=A8=E9=80=89=E6=8B=A9model=E7=9A=84?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=B7=BB=E5=8A=A0=E6=90=9C=E7=B4=A2=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=9A=84=E6=90=9C=E7=B4=A2=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/components/MenuFieldCom/index.vue | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/web/src/views/system/menu/components/MenuFieldCom/index.vue b/web/src/views/system/menu/components/MenuFieldCom/index.vue index ec3822bb..435ce3d9 100644 --- a/web/src/views/system/menu/components/MenuFieldCom/index.vue +++ b/web/src/views/system/menu/components/MenuFieldCom/index.vue @@ -4,8 +4,15 @@
已选择:{{ props.model }}
+ +
-
+ +
{{ item.app + '--' + item.title + '(' + item.key + ')' }} @@ -29,7 +36,7 @@