雪花ID重复预处理

This commit is contained in:
caoqianming 2022-10-11 17:09:05 +08:00
parent aff9c0d613
commit b2534d5471
1 changed files with 16 additions and 2 deletions

View File

@ -1,7 +1,9 @@
import time
import django.utils.timezone as timezone import django.utils.timezone as timezone
from django.db import models from django.db import models
from django.db.models.query import QuerySet from django.db.models.query import QuerySet
from apps.utils.snowflake import idWorker 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( create_time = models.DateTimeField(
default=timezone.now, verbose_name='创建时间', help_text='创建时间') default=timezone.now, verbose_name='创建时间', help_text='创建时间')
update_time = models.DateTimeField( update_time = models.DateTimeField(
@ -66,9 +69,20 @@ class BaseModel(models.Model):
abstract = True abstract = True
def save(self, *args, **kwargs) -> None: def save(self, *args, **kwargs) -> None:
# 出现了雪花ID重复,不知道怎么处理,先这样异常处理一下
gen_id = False
if not self.id: if not self.id:
gen_id = True
self.id = idWorker.get_id() 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): class SoftModel(BaseModel):