修复了excel表格上传回滚问题

This commit is contained in:
王思川 2024-06-18 04:42:01 +08:00
parent 5b7cc3c703
commit 2fbe6626b7
2 changed files with 27 additions and 5 deletions

View File

@ -1,5 +1,7 @@
from django.db import models from django.db import models
from application.org_mgnt.models import PrimaryDepartment
# 集团经营目标表 # 集团经营目标表
class GroupBusinessTarget(models.Model): class GroupBusinessTarget(models.Model):
@ -23,6 +25,14 @@ class GroupBusinessTarget(models.Model):
expense_limit = models.DecimalField(max_digits=15, decimal_places=2, verbose_name='费用限额(元)') expense_limit = models.DecimalField(max_digits=15, decimal_places=2, verbose_name='费用限额(元)')
operating_profit = models.DecimalField(max_digits=15, decimal_places=2, verbose_name='营业利润(元)') operating_profit = models.DecimalField(max_digits=15, decimal_places=2, verbose_name='营业利润(元)')
def save(self, *args, **kwargs):
primary_department_name = PrimaryDepartment.objects.filter(department_name=self.primary_department).first()
if not primary_department_name:
raise ValueError("一级部门不存在")
super(GroupBusinessTarget, self).save(*args, **kwargs)
class Meta: class Meta:
verbose_name = '集团经营目标' verbose_name = '集团经营目标'
verbose_name_plural = '集团经营目标表' verbose_name_plural = '集团经营目标表'

View File

@ -1,5 +1,6 @@
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.apps import apps from django.apps import apps
from django.db import transaction
class ExcelDataSaver: class ExcelDataSaver:
@ -36,7 +37,7 @@ class ExcelDataSaver:
for field, errors in e.message_dict.items(): for field, errors in e.message_dict.items():
for error in errors: for error in errors:
try: try:
self.errors.append(f"第【{row_num + 1}】行【{self.reverse_field_mapping[field]}字段输入错误: {error}") self.errors.append(f"第【{row_num + 1}】行【{self.reverse_field_mapping[field]}输入错误: {error}")
except KeyError: except KeyError:
self.errors.append(f"第【{row_num + 1}】行,错误原因: {error}") self.errors.append(f"第【{row_num + 1}】行,错误原因: {error}")
except Exception as e: except Exception as e:
@ -44,11 +45,22 @@ class ExcelDataSaver:
return len(self.errors) == 0 return len(self.errors) == 0
def save_data(self): def save_data(self):
errors = []
row_counter = 0
if self.validate_data(): if self.validate_data():
for row in self.data: try:
row_data = {self.field_mapping[field]: value for field, value in row.items() if field in self.field_mapping} with transaction.atomic():
instance = self.model(**row_data) for row in self.data:
instance.save() row_data = {self.field_mapping[field]: value for field, value in row.items() if field in self.field_mapping}
instance = self.model(**row_data)
instance.save()
row_counter += 1
except Exception as e:
errors.append(f"第【{row_counter + 1}】行保存错误: {e}")
transaction.rollback() # 回滚事务
self.errors.extend(errors)
return False
return True return True
return False return False