From 4ac8ed7627fc4621e5132d83e54468382b54da3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=BF=E5=B0=8F=E5=A4=A9?= <1638245306@qq.com> Date: Mon, 20 Nov 2023 17:19:20 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.更新字段管理 --- backend/dvadmin/system/models.py | 2 +- backend/dvadmin/system/urls.py | 4 +-- .../system/views/{column.py => menu_field.py} | 35 +++++++------------ backend/dvadmin/utils/field_permission.py | 10 +++--- backend/dvadmin/utils/models.py | 5 +-- backend/dvadmin/utils/viewset.py | 9 ++--- 6 files changed, 25 insertions(+), 40 deletions(-) rename backend/dvadmin/system/views/{column.py => menu_field.py} (72%) diff --git a/backend/dvadmin/system/models.py b/backend/dvadmin/system/models.py index 79eb236..ea7224d 100644 --- a/backend/dvadmin/system/models.py +++ b/backend/dvadmin/system/models.py @@ -179,7 +179,7 @@ class Menu(CoreModel): ordering = ("sort",) class MenuField(CoreModel): - model = models.CharField(max_length=64, verbose_name='表名',null=True,blank=True) + model = models.CharField(max_length=64, verbose_name='表名') menu = models.ForeignKey(to='Menu', on_delete=models.CASCADE, verbose_name='菜单', db_constraint=False) field_name = models.CharField(max_length=64, verbose_name='模型表字段名') title = models.CharField(max_length=64, verbose_name='字段显示名') diff --git a/backend/dvadmin/system/urls.py b/backend/dvadmin/system/urls.py index 4e11c04..512c399 100644 --- a/backend/dvadmin/system/urls.py +++ b/backend/dvadmin/system/urls.py @@ -16,7 +16,7 @@ from dvadmin.system.views.role_menu import RoleMenuPermissionViewSet from dvadmin.system.views.role_menu_button_permission import RoleMenuButtonPermissionViewSet from dvadmin.system.views.system_config import SystemConfigViewSet from dvadmin.system.views.user import UserViewSet -from dvadmin.system.views.column import ColumnViewSet +from dvadmin.system.views.menu_field import MenuFieldViewSet system_url = routers.SimpleRouter() system_url.register(r'menu', MenuViewSet) @@ -33,7 +33,7 @@ system_url.register(r'system_config', SystemConfigViewSet) system_url.register(r'message_center', MessageCenterViewSet) system_url.register(r'role_menu_button_permission', RoleMenuButtonPermissionViewSet) system_url.register(r'role_menu_permission', RoleMenuPermissionViewSet) -system_url.register(r'column', ColumnViewSet) +system_url.register(r'column', MenuFieldViewSet) urlpatterns = [ diff --git a/backend/dvadmin/system/views/column.py b/backend/dvadmin/system/views/menu_field.py similarity index 72% rename from backend/dvadmin/system/views/column.py rename to backend/dvadmin/system/views/menu_field.py index 993be52..8f6cd1a 100644 --- a/backend/dvadmin/system/views/column.py +++ b/backend/dvadmin/system/views/menu_field.py @@ -11,7 +11,7 @@ from dvadmin.utils.serializers import CustomModelSerializer from dvadmin.utils.json_response import DetailResponse, ErrorResponse, SuccessResponse -class ColumnSerializer(CustomModelSerializer): +class MenuFieldSerializer(CustomModelSerializer): """ 列权限序列化器 """ @@ -22,32 +22,24 @@ class ColumnSerializer(CustomModelSerializer): read_only_fields = ['id'] -class ColumnViewSet(CustomModelViewSet): +class MenuFieldViewSet(CustomModelViewSet): """ 列权限视图集 """ queryset = MenuField.objects.all() - serializer_class = ColumnSerializer + serializer_class = MenuFieldSerializer def list(self, request, *args, **kwargs): - app_name = request.query_params.get('app') - model_name = request.query_params.get('model') menu = request.query_params.get('menu') if not menu: return SuccessResponse([]) queryset = self.filter_queryset(self.get_queryset().filter(menu=menu)) - # page = self.paginate_queryset(queryset) - # if page is not None: - # serializer = self.get_serializer(page, many=True, request=request) - # return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True, request=request) return SuccessResponse(data=serializer.data, msg="获取成功") def create(self, request, *args, **kwargs): payload = request.data - print(11,get_custom_app_models()) for model in apps.get_models(): - print(model.__name__) if payload.get('model') == model.__name__: break else: @@ -62,34 +54,31 @@ class ColumnViewSet(CustomModelViewSet): def get_models(self, request): """获取所有项目app下的model""" res = [] - for app in get_custom_app_models(): - for model in app: - res.append({ - 'app': model['app'], - 'title': model['verbose'], - 'key': model['model'] - }) + for model in get_custom_app_models(): + res.append({ + 'app': model['app'], + 'title': model['verbose'], + 'key': model['model'] + }) return DetailResponse(res) @action(methods=['POST'], detail=False, permission_classes=[IsAuthenticated]) def auto_match_fields(self, request): """自动匹配已有的字段""" menu_id = request.data.get('menu') - app_name = request.data.get('app') model_name = request.data.get('model') - if not menu_id or not model_name or not app_name: + if not menu_id or not model_name: return ErrorResponse( msg='参数错误') - for model in get_custom_app_models(app_name): + for model in get_custom_app_models(): if model['model'] != model_name: continue for field in model['fields']: if MenuField.objects.filter( - menu_id=menu_id, app=app_name, model=model_name, field_name=field['name'] + menu_id=menu_id, model=model_name, field_name=field['name'] ).exists(): continue data = { 'menu': menu_id, - 'app': app_name, 'model': model_name, 'field_name': field['name'], 'title': str(field['title']), diff --git a/backend/dvadmin/utils/field_permission.py b/backend/dvadmin/utils/field_permission.py index 1c969a0..20b4cb9 100644 --- a/backend/dvadmin/utils/field_permission.py +++ b/backend/dvadmin/utils/field_permission.py @@ -15,16 +15,14 @@ class FieldPermissionMixin: 获取字段权限 """ finded = False - for app in get_custom_app_models(): - for model in app: - if model['object'] is self.serializer_class.Meta.model: - finded = True - break + for model in get_custom_app_models(): + if model['object'] is self.serializer_class.Meta.model: + finded = True + break if finded: break if finded is False: return [] - print(266666,model) user = request.user if user.is_superuser==1: data = MenuField.objects.filter( model=model['model']).values('field_name') diff --git a/backend/dvadmin/utils/models.py b/backend/dvadmin/utils/models.py index 8ea8007..e331528 100644 --- a/backend/dvadmin/utils/models.py +++ b/backend/dvadmin/utils/models.py @@ -141,6 +141,7 @@ def get_custom_app_models(app_name=None): return get_model_from_app(app_name) res = [] for app in settings.CUSTOM_APPS: - # print(222,get_model_from_app(app)) - res.append(get_model_from_app(app)) + all_models = get_model_from_app(app) + for model in all_models: + res.append(model) return res diff --git a/backend/dvadmin/utils/viewset.py b/backend/dvadmin/utils/viewset.py index 6b47457..a20b9be 100644 --- a/backend/dvadmin/utils/viewset.py +++ b/backend/dvadmin/utils/viewset.py @@ -82,12 +82,9 @@ class CustomModelViewSet(ModelViewSet, ImportSerializerMixin, ExportSerializerMi def get_menu_field(self, serializer_class): """获取字段权限""" finded = False - for app in get_custom_app_models(): - for model in app: - if model['object'] is serializer_class.Meta.model: - finded = True - break - if finded: + for model in get_custom_app_models(): + if model['object'] is serializer_class.Meta.model: + finded = True break if finded is False: return []