From 2b15fc5e8bde998f87168463e724a6385e0be416 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 10 Jan 2024 13:37:55 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=85=BC=E7=94=A8=E5=A4=84=E7=90=86?= =?UTF-8?q?=E4=B8=80=E4=B8=8B=20tree?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/api/mixin.py | 8 +++++++- apps/perms/serializers/permission.py | 13 +++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/apps/assets/api/mixin.py b/apps/assets/api/mixin.py index 25aefa62a..af5864e4e 100644 --- a/apps/assets/api/mixin.py +++ b/apps/assets/api/mixin.py @@ -81,13 +81,19 @@ class SerializeToTreeNodeMixin: platform_map = {p.id: p for p in Platform.objects.all()} data = [] + root_assets_count = 0 for asset in assets: platform = platform_map.get(asset.platform_id) if not platform: continue pid = node_key or get_pid(asset, platform) - if not pid or pid.isdigit(): + if not pid: continue + # 根节点最多显示 1000 个资产 + if pid.isdigit(): + if root_assets_count > 1000: + continue + root_assets_count += 1 data.append({ 'id': str(asset.id), 'name': asset.name, diff --git a/apps/perms/serializers/permission.py b/apps/perms/serializers/permission.py index 36e0a6f33..3e32b40e1 100644 --- a/apps/perms/serializers/permission.py +++ b/apps/perms/serializers/permission.py @@ -196,10 +196,11 @@ class AssetPermissionListSerializer(AssetPermissionSerializer): @classmethod def setup_eager_loading(cls, queryset): """Perform necessary eager loading of data.""" - queryset = queryset.annotate( - users_amount=Count("users"), - user_groups_amount=Count("user_groups"), - assets_amount=Count("assets"), - nodes_amount=Count("nodes"), - ) + queryset = queryset \ + .prefetch_related('labels', 'labels__label') \ + .annotate(users_amount=Count("users"), + user_groups_amount=Count("user_groups"), + assets_amount=Count("assets"), + nodes_amount=Count("nodes"), + ) return queryset