雪花ID重复预处理
This commit is contained in:
parent
aff9c0d613
commit
b2534d5471
|
@ -1,7 +1,9 @@
|
|||
import time
|
||||
import django.utils.timezone as timezone
|
||||
from django.db import models
|
||||
from django.db.models.query import QuerySet
|
||||
from apps.utils.snowflake import idWorker
|
||||
from django.db import IntegrityError
|
||||
|
||||
# 自定义软删除查询基类
|
||||
|
||||
|
@ -54,7 +56,8 @@ class BaseModel(models.Model):
|
|||
"""
|
||||
基本表
|
||||
"""
|
||||
id = models.CharField(max_length=20, primary_key=True, editable=False, verbose_name='主键ID', help_text='主键ID')
|
||||
id = models.CharField(max_length=20, primary_key=True,
|
||||
editable=False, verbose_name='主键ID', help_text='主键ID')
|
||||
create_time = models.DateTimeField(
|
||||
default=timezone.now, verbose_name='创建时间', help_text='创建时间')
|
||||
update_time = models.DateTimeField(
|
||||
|
@ -66,9 +69,20 @@ class BaseModel(models.Model):
|
|||
abstract = True
|
||||
|
||||
def save(self, *args, **kwargs) -> None:
|
||||
# 出现了雪花ID重复,不知道怎么处理,先这样异常处理一下
|
||||
gen_id = False
|
||||
if not self.id:
|
||||
gen_id = True
|
||||
self.id = idWorker.get_id()
|
||||
return super().save(*args, **kwargs)
|
||||
try:
|
||||
x = super().save(*args, **kwargs)
|
||||
return x
|
||||
except IntegrityError as e:
|
||||
if gen_id:
|
||||
time.sleep(0.01)
|
||||
self.id = idWorker.get_id()
|
||||
return super().save(*args, **kwargs)
|
||||
raise e
|
||||
|
||||
|
||||
class SoftModel(BaseModel):
|
||||
|
|
Loading…
Reference in New Issue