Skip to content

Commit ca178c5

Browse files
committed
[Update] 修复初始化 Default 节点的 Bug(原因:在其他组织下 Default 节点默认的 key 1 已经存在)4
1 parent d794842 commit ca178c5

1 file changed

Lines changed: 20 additions & 16 deletions

File tree

apps/assets/models/node.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -391,9 +391,16 @@ def empty_node(cls):
391391
def default_node(cls):
392392
with tmp_to_org(Organization.default()):
393393
defaults = {'value': cls.default_value}
394-
obj, created = cls.objects.get_or_create(
395-
defaults=defaults, key=cls.default_key,
396-
)
394+
try:
395+
obj, created = cls.objects.get_or_create(
396+
defaults=defaults, key=cls.default_key,
397+
)
398+
except IntegrityError as e:
399+
logger.error("Create default node failed: {}".format(e))
400+
cls.modify_other_org_root_node_key()
401+
obj, created = cls.objects.get_or_create(
402+
defaults=defaults, key=cls.default_key,
403+
)
397404
return obj
398405

399406
@classmethod
@@ -407,12 +414,7 @@ def favorite_node(cls):
407414

408415
@classmethod
409416
def initial_some_nodes(cls):
410-
try:
411-
cls.default_node()
412-
except IntegrityError as e:
413-
logger.error("Create default node failed: {}".format(e))
414-
cls.modify_other_org_root_node_key()
415-
cls.default_node()
417+
cls.default_node()
416418
cls.empty_node()
417419
cls.ungrouped_node()
418420
cls.favorite_node()
@@ -424,20 +426,22 @@ def modify_other_org_root_node_key(cls):
424426
因为在其他组织下存在 default 节点,故在 DEFAULT 组织下 get 不到 create 失败
425427
"""
426428
logger.info("Modify other org root node key")
427-
with transaction.atomic():
428-
with tmp_to_org(Organization.root()):
429-
node = cls.objects.filter(key='1').first()
430-
if not node:
429+
430+
with tmp_to_org(Organization.root()):
431+
node_key1 = cls.objects.filter(key='1').first()
432+
if not node_key1:
431433
logger.info("Not found node that `key` = 1")
432434
return
433-
if not node.org.is_real():
435+
if not node_key1.org.is_real():
434436
logger.info("Org is not real for node that `key` = 1")
435437
return
436-
with tmp_to_org(node.org):
438+
439+
with transaction.atomic():
440+
with tmp_to_org(node_key1.org):
441+
org_root_node_new_key = cls.get_next_org_root_node_key()
437442
for n in cls.objects.all():
438443
old_key = n.key
439444
key_list = n.key.split(':')
440-
org_root_node_new_key = cls.get_next_org_root_node_key()
441445
key_list[0] = org_root_node_new_key
442446
new_key = ':'.join(key_list)
443447
n.key = new_key

0 commit comments

Comments
 (0)