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

pull/3408/head
BaiJiangJie 2019-11-01 20:02:34 +08:00
parent d7948425df
commit ca178c534e
1 changed files with 20 additions and 16 deletions

View File

@ -391,9 +391,16 @@ class SomeNodesMixin:
def default_node(cls): def default_node(cls):
with tmp_to_org(Organization.default()): with tmp_to_org(Organization.default()):
defaults = {'value': cls.default_value} defaults = {'value': cls.default_value}
obj, created = cls.objects.get_or_create( try:
defaults=defaults, key=cls.default_key, 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 return obj
@classmethod @classmethod
@ -407,12 +414,7 @@ class SomeNodesMixin:
@classmethod @classmethod
def initial_some_nodes(cls): def initial_some_nodes(cls):
try: cls.default_node()
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.empty_node() cls.empty_node()
cls.ungrouped_node() cls.ungrouped_node()
cls.favorite_node() cls.favorite_node()
@ -424,20 +426,22 @@ class SomeNodesMixin:
因为在其他组织下存在 default 节点故在 DEFAULT 组织下 get 不到 create 失败 因为在其他组织下存在 default 节点故在 DEFAULT 组织下 get 不到 create 失败
""" """
logger.info("Modify other org root node key") logger.info("Modify other org root node key")
with transaction.atomic():
with tmp_to_org(Organization.root()): with tmp_to_org(Organization.root()):
node = cls.objects.filter(key='1').first() node_key1 = cls.objects.filter(key='1').first()
if not node: if not node_key1:
logger.info("Not found node that `key` = 1") logger.info("Not found node that `key` = 1")
return 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") logger.info("Org is not real for node that `key` = 1")
return 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(): for n in cls.objects.all():
old_key = n.key old_key = n.key
key_list = n.key.split(':') 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 key_list[0] = org_root_node_new_key
new_key = ':'.join(key_list) new_key = ':'.join(key_list)
n.key = new_key n.key = new_key