From a96bda8ca94c5566d3866a3df62a43fdacf1486d Mon Sep 17 00:00:00 2001 From: ibuler Date: Fri, 25 May 2018 17:26:57 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E6=A0=91=E5=BD=A2?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/models/node.py | 41 ++++++++++++++++++++++++------------- apps/jumpserver/settings.py | 6 +++++- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py index fed8980ed..b63daf513 100644 --- a/apps/assets/models/node.py +++ b/apps/assets/models/node.py @@ -65,15 +65,25 @@ class Node(models.Model): key__regex=r'^{}:[0-9]+$'.format(self.key) ) + def get_children_with_self(self): + return self.__class__.objects.filter( + key__regex=r'^{0}$|^{0}:[0-9]+$'.format(self.key) + ) + def get_all_children(self): return self.__class__.objects.filter( key__startswith='{}:'.format(self.key) ) + def get_all_children_with_self(self): + return self.__class__.objects.filter( + key__regex=r'^{0}$|^{0}:'.format(self.key) + ) + def get_family(self): - children = list(self.get_all_children()) - children.append(self) - return children + ancestor = self.ancestor + children = self.get_all_children() + return [*tuple(ancestor), self, *tuple(children)] def get_assets(self): from .asset import Asset @@ -88,7 +98,7 @@ class Node(models.Model): if self.is_root(): assets = Asset.objects.all() else: - nodes = self.get_family() + nodes = self.get_all_children_with_self() assets = Asset.objects.filter(nodes__in=nodes).distinct() return assets @@ -108,18 +118,15 @@ class Node(models.Model): @property def parent(self): - if self.key == "0": - return self.__class__.root() - elif not self.key.startswith("0"): + if self.key == "0" or not self.key.startswith("0"): return self.__class__.root() parent_key = ":".join(self.key.split(":")[:-1]) try: parent = self.__class__.objects.get(key=parent_key) + return parent except Node.DoesNotExist: return self.__class__.root() - else: - return parent @parent.setter def parent(self, parent): @@ -127,14 +134,20 @@ class Node(models.Model): @property def ancestor(self): - if self.parent == self.__class__.root(): + _key = self.key.split(':') + ancestor_keys = [] + + if self.is_root(): return [self.__class__.root()] - else: - return [self.parent, *tuple(self.parent.ancestor)] + + for i in range(len(_key)-1): + _key.pop() + ancestor_keys.append(':'.join(_key)) + return self.__class__.objects.filter(key__in=ancestor_keys) @property - def ancestor_with_node(self): - ancestor = self.ancestor + def ancestor_with_self(self): + ancestor = list(self.ancestor) ancestor.insert(0, self) return ancestor diff --git a/apps/jumpserver/settings.py b/apps/jumpserver/settings.py index af72292f7..b81188b9d 100644 --- a/apps/jumpserver/settings.py +++ b/apps/jumpserver/settings.py @@ -229,7 +229,11 @@ LOGGING = { 'django_auth_ldap': { 'handlers': ['console', 'ansible_logs'], 'level': "INFO", - } + }, + # 'django.db': { + # 'handlers': ['console', 'file'], + # 'level': 'DEBUG' + # } } }