fix : ofm-models-publicity 修改记录编号自动生成

This commit is contained in:
zty 2025-10-13 14:18:03 +08:00
parent 7d87c79dd1
commit b93024ca44
1 changed files with 10 additions and 13 deletions

View File

@ -148,19 +148,16 @@ class Publicity(CommonBDModel):
# 记录编号自动生成 # 记录编号自动生成
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if not self.number: if not self.number:
with transaction.atomic(): last_number = self.__class__.objects.filter(number__startswith=f"(GXKG-{datetime.now().year}-)").order_by('-id').first()
# 加行锁,防止并发取到相同 last_number if last_number:
last_number = self.__class__.objects.select_for_update(skip_locked=True).order_by('-id').first() # skip_locked 锁定行,避免并发冲突 try:
if last_number: last_num = int(last_number.number.split('-')[-1])
try: except ValueError:
last_num = int(last_number.number.split('-')[-1]) last_num = 0
except ValueError: else:
last_num = 0 last_num =0
new_num= last_num + 1 # 格式化编号,带补零
else: self.number = f"(GXKG-{datetime.now().year}-{last_num+1:02d})"
new_num = 1
# 格式化编号,带补零
self.number = f"(GXKG-{datetime.now().year}-{new_num:02d})"
super().save(*args, **kwargs) super().save(*args, **kwargs)