From ca178c534ead0212a6aad011a5efe6ad6d9d0a16 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Fri, 1 Nov 2019 20:02:34 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=20=E4=BF=AE=E5=A4=8D=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=20Default=20=E8=8A=82=E7=82=B9=E7=9A=84=20Bug?= =?UTF-8?q?=EF=BC=88=E5=8E=9F=E5=9B=A0=EF=BC=9A=E5=9C=A8=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E4=B8=8B=20Default=20=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E7=9A=84=20key=201=20=E5=B7=B2=E7=BB=8F?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=EF=BC=894?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/models/node.py | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py index b9f18b9ca..bb5369ec3 100644 --- a/apps/assets/models/node.py +++ b/apps/assets/models/node.py @@ -391,9 +391,16 @@ class SomeNodesMixin: def default_node(cls): with tmp_to_org(Organization.default()): defaults = {'value': cls.default_value} - obj, created = cls.objects.get_or_create( - defaults=defaults, key=cls.default_key, - ) + try: + obj, created = cls.objects.get_or_create( + defaults=defaults, key=cls.default_key, + ) + except IntegrityError as e: + logger.error("Create default node failed: {}".format(e)) + cls.modify_other_org_root_node_key() + obj, created = cls.objects.get_or_create( + defaults=defaults, key=cls.default_key, + ) return obj @classmethod @@ -407,12 +414,7 @@ class SomeNodesMixin: @classmethod def initial_some_nodes(cls): - try: - cls.default_node() - except IntegrityError as e: - logger.error("Create default node failed: {}".format(e)) - cls.modify_other_org_root_node_key() - cls.default_node() + cls.default_node() cls.empty_node() cls.ungrouped_node() cls.favorite_node() @@ -424,20 +426,22 @@ class SomeNodesMixin: 因为在其他组织下存在 default 节点,故在 DEFAULT 组织下 get 不到 create 失败 """ logger.info("Modify other org root node key") - with transaction.atomic(): - with tmp_to_org(Organization.root()): - node = cls.objects.filter(key='1').first() - if not node: + + with tmp_to_org(Organization.root()): + node_key1 = cls.objects.filter(key='1').first() + if not node_key1: logger.info("Not found node that `key` = 1") return - if not node.org.is_real(): + if not node_key1.org.is_real(): logger.info("Org is not real for node that `key` = 1") return - with tmp_to_org(node.org): + + with transaction.atomic(): + with tmp_to_org(node_key1.org): + org_root_node_new_key = cls.get_next_org_root_node_key() for n in cls.objects.all(): old_key = n.key key_list = n.key.split(':') - org_root_node_new_key = cls.get_next_org_root_node_key() key_list[0] = org_root_node_new_key new_key = ':'.join(key_list) n.key = new_key