From b2534d54715adcdd2e15c91f77f909ab06868d9f Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 11 Oct 2022 17:09:05 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9B=AA=E8=8A=B1ID=E9=87=8D=E5=A4=8D=E9=A2=84?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/utils/models.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) 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):