feat: base 移除基础model层事务
This commit is contained in:
parent
7a82844842
commit
f151f4f2ec
|
@ -119,16 +119,15 @@ class BaseModel(models.Model):
|
||||||
|
|
||||||
for attempt in range(3):
|
for attempt in range(3):
|
||||||
try:
|
try:
|
||||||
with transaction.atomic():
|
# 先尝试获取(带锁)
|
||||||
# 先尝试获取(带锁)
|
try:
|
||||||
try:
|
obj = cls.objects.select_for_update().get(**kwargs)
|
||||||
obj = cls.objects.select_for_update().get(**kwargs)
|
return obj, False
|
||||||
return obj, False
|
except cls.DoesNotExist:
|
||||||
except cls.DoesNotExist:
|
# 不存在则创建
|
||||||
# 不存在则创建
|
obj = cls(**kwargs, **defaults)
|
||||||
obj = cls(**kwargs, **defaults)
|
obj.save()
|
||||||
obj.save()
|
return obj, True
|
||||||
return obj, True
|
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
# 发生唯一约束冲突时重试
|
# 发生唯一约束冲突时重试
|
||||||
if attempt == 2:
|
if attempt == 2:
|
||||||
|
@ -148,32 +147,32 @@ class BaseModel(models.Model):
|
||||||
if not self.id:
|
if not self.id:
|
||||||
is_create = True
|
is_create = True
|
||||||
self.id = idWorker.get_id()
|
self.id = idWorker.get_id()
|
||||||
with transaction.atomic():
|
|
||||||
old_parent = None
|
old_parent = None
|
||||||
need_handle_parent = False
|
need_handle_parent = False
|
||||||
if hasattr(self, "parent"):
|
if hasattr(self, "parent"):
|
||||||
if is_create:
|
if is_create:
|
||||||
|
need_handle_parent = True
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
old_parent = self.__class__.objects.get(id=self.id).parent
|
||||||
|
except Exception:
|
||||||
|
self.parent = None
|
||||||
need_handle_parent = True
|
need_handle_parent = True
|
||||||
else:
|
if self.parent != old_parent:
|
||||||
try:
|
need_handle_parent = True
|
||||||
old_parent = self.__class__.objects.get(id=self.id).parent
|
try:
|
||||||
except Exception:
|
ins = super().save(*args, **kwargs)
|
||||||
self.parent = None
|
except IntegrityError as e:
|
||||||
need_handle_parent = True
|
if is_create:
|
||||||
if self.parent != old_parent:
|
time.sleep(0.01)
|
||||||
need_handle_parent = True
|
self.id = idWorker.get_id()
|
||||||
try:
|
|
||||||
ins = super().save(*args, **kwargs)
|
ins = super().save(*args, **kwargs)
|
||||||
except IntegrityError as e:
|
raise e
|
||||||
if is_create:
|
# 处理父级
|
||||||
time.sleep(0.01)
|
if need_handle_parent:
|
||||||
self.id = idWorker.get_id()
|
self.handle_parent()
|
||||||
ins = super().save(*args, **kwargs)
|
return ins
|
||||||
raise e
|
|
||||||
# 处理父级
|
|
||||||
if need_handle_parent:
|
|
||||||
self.handle_parent()
|
|
||||||
return ins
|
|
||||||
|
|
||||||
|
|
||||||
class SoftModel(BaseModel):
|
class SoftModel(BaseModel):
|
||||||
|
|
Loading…
Reference in New Issue