diff --git a/apps/utils/models.py b/apps/utils/models.py index 01830a3e..c019fdda 100755 --- a/apps/utils/models.py +++ b/apps/utils/models.py @@ -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):