feat: cms softdelet bug fix
This commit is contained in:
@@ -37,11 +37,15 @@ class CmsInstitutionSerializer(serializers.ModelSerializer):
|
||||
value = (value or '').strip()
|
||||
if not value:
|
||||
raise AppError('CMS_VALIDATION_ERROR', '机构编码不能为空', status_code=400)
|
||||
qs = Institution.objects.filter(code=value)
|
||||
# 唯一性按 all_objects(含已停用)判定:编码唯一约束对软删行仍生效,
|
||||
# 否则同编码重建会在写库时撞唯一约束抛 500。
|
||||
qs = Institution.all_objects.filter(code=value)
|
||||
if self.instance is not None:
|
||||
qs = qs.exclude(pk=self.instance.pk)
|
||||
if qs.exists():
|
||||
raise AppError('CMS_INSTITUTION_CODE_EXISTS', '机构编码已存在', status_code=400)
|
||||
raise AppError('CMS_INSTITUTION_CODE_EXISTS',
|
||||
'机构编码已存在(含已停用机构),如需复用请先恢复或更换编码',
|
||||
status_code=400)
|
||||
return value
|
||||
|
||||
|
||||
@@ -58,9 +62,12 @@ class CmsDepartmentSerializer(serializers.ModelSerializer):
|
||||
value = (value or '').strip()
|
||||
if not value:
|
||||
raise AppError('CMS_VALIDATION_ERROR', '科室名称不能为空', status_code=400)
|
||||
qs = Department.objects.filter(name=value)
|
||||
# 唯一性按 all_objects(含已停用)判定,避免同名重建在写库时撞唯一约束抛 500。
|
||||
qs = Department.all_objects.filter(name=value)
|
||||
if self.instance is not None:
|
||||
qs = qs.exclude(pk=self.instance.pk)
|
||||
if qs.exists():
|
||||
raise AppError('CMS_DEPARTMENT_NAME_EXISTS', '科室名称已存在', status_code=400)
|
||||
raise AppError('CMS_DEPARTMENT_NAME_EXISTS',
|
||||
'科室名称已存在(含已停用科室),如需复用请先恢复或更换名称',
|
||||
status_code=400)
|
||||
return value
|
||||
|
||||
@@ -172,14 +172,15 @@ class CmsDepartmentViewSet(viewsets.ModelViewSet):
|
||||
except Exception:
|
||||
raise AppError('CMS_IMPORT_BAD_FILE', '文件解析失败,请使用导入模板', status_code=400)
|
||||
|
||||
existing = set(Department.objects.values_list('name', flat=True))
|
||||
# 含已停用科室:避免导入与软删科室同名而产生重复行
|
||||
existing = set(Department.all_objects.values_list('name', flat=True))
|
||||
success, errors = 0, []
|
||||
for idx, row in enumerate(rows, start=2):
|
||||
name = (row.get('科室名称') or '').strip()
|
||||
if not name:
|
||||
errors.append({'row': idx, 'reason': '科室名称为空'}); continue
|
||||
if name in existing:
|
||||
errors.append({'row': idx, 'reason': f'科室已存在:{name}'}); continue
|
||||
errors.append({'row': idx, 'reason': f'科室已存在(含已停用):{name}'}); continue
|
||||
Department.objects.create(name=name, category=(row.get('分类') or '').strip())
|
||||
existing.add(name)
|
||||
success += 1
|
||||
|
||||
+7
-2
@@ -81,11 +81,14 @@ class CmsUserWriteSerializer(serializers.ModelSerializer):
|
||||
value = (value or '').strip()
|
||||
if not re.match(r'^1[3-9]\d{9}$', value):
|
||||
raise AppError('CMS_VALIDATION_ERROR', '手机号格式不合法', status_code=400)
|
||||
# 含已停用账号:手机号唯一约束对软删行仍生效,提示需复用应先恢复/换号
|
||||
qs = User.all_objects.filter(phone=value)
|
||||
if self.instance is not None:
|
||||
qs = qs.exclude(pk=self.instance.pk)
|
||||
if qs.exists():
|
||||
raise AppError('CMS_USER_PHONE_EXISTS', '手机号已存在', status_code=400)
|
||||
raise AppError('CMS_USER_PHONE_EXISTS',
|
||||
'手机号已存在(含已停用账号),如需复用请先恢复或更换手机号',
|
||||
status_code=400)
|
||||
return value
|
||||
|
||||
def validate(self, attrs):
|
||||
@@ -131,7 +134,9 @@ class CmsUserWriteSerializer(serializers.ModelSerializer):
|
||||
username=phone, password=f'Pass{phone}', **validated_data
|
||||
)
|
||||
except IntegrityError:
|
||||
raise AppError('CMS_USER_PHONE_EXISTS', '手机号已存在', status_code=400)
|
||||
raise AppError('CMS_USER_PHONE_EXISTS',
|
||||
'手机号已存在(含已停用账号),如需复用请先恢复或更换手机号',
|
||||
status_code=400)
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
for key, val in validated_data.items():
|
||||
|
||||
Reference in New Issue
Block a user