From 2e9711ae8a958de2083027fc4167ad7f5a75704e Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 12 Aug 2019 19:03:10 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9nodes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/models/node.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py index 916dae1e2..96a9b7acb 100644 --- a/apps/assets/models/node.py +++ b/apps/assets/models/node.py @@ -211,7 +211,8 @@ class AssetsAmountMixin: cached = cache.get(cache_key) if cached is not None: return cached - assets_amount = self.get_all_assets().count() + assets_amount = self.get_all_assets().only('id').count() + self.assets_amount = assets_amount return assets_amount @assets_amount.setter @@ -328,14 +329,8 @@ class Node(OrgModelMixin, FamilyMixin, FullValueMixin, AssetsAmountMixin): def get_all_assets(self): from .asset import Asset - pattern = r'^{0}$|^{0}:'.format(self.key) - args = [] - kwargs = {} - if self.is_root(): - args.append(Q(nodes__key__regex=pattern) | Q(nodes=None)) - else: - kwargs['nodes__key__regex'] = pattern - assets = Asset.objects.filter(*args, **kwargs).distinct() + children = self.get_all_children() + assets = Asset.objects.filter(nodes__in=children).distinct() return assets def get_all_valid_assets(self): From a315df29ca2d403ddd400623616e6304bf2b9950 Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 12 Aug 2019 19:11:32 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[Update]=20=E6=9A=82=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E6=9B=B4=E6=94=B9=E8=BF=99=E9=87=8C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/models/node.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py index 96a9b7acb..c1e47d56b 100644 --- a/apps/assets/models/node.py +++ b/apps/assets/models/node.py @@ -329,8 +329,14 @@ class Node(OrgModelMixin, FamilyMixin, FullValueMixin, AssetsAmountMixin): def get_all_assets(self): from .asset import Asset - children = self.get_all_children() - assets = Asset.objects.filter(nodes__in=children).distinct() + pattern = r'^{0}$|^{0}:'.format(self.key) + args = [] + kwargs = {} + if self.is_root(): + args.append(Q(nodes__key__regex=pattern) | Q(nodes=None)) + else: + kwargs['nodes__key__regex'] = pattern + assets = Asset.objects.filter(*args, **kwargs).distinct() return assets def get_all_valid_assets(self):