修复了excel表格上传回滚问题
This commit is contained in:
parent
5b7cc3c703
commit
2fbe6626b7
|
@ -1,5 +1,7 @@
|
|||
from django.db import models
|
||||
|
||||
from application.org_mgnt.models import PrimaryDepartment
|
||||
|
||||
|
||||
# 集团经营目标表
|
||||
class GroupBusinessTarget(models.Model):
|
||||
|
@ -23,6 +25,14 @@ class GroupBusinessTarget(models.Model):
|
|||
expense_limit = 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:
|
||||
verbose_name = '集团经营目标'
|
||||
verbose_name_plural = '集团经营目标表'
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from django.core.exceptions import ValidationError
|
||||
from django.apps import apps
|
||||
from django.db import transaction
|
||||
|
||||
|
||||
class ExcelDataSaver:
|
||||
|
@ -36,7 +37,7 @@ class ExcelDataSaver:
|
|||
for field, errors in e.message_dict.items():
|
||||
for error in errors:
|
||||
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:
|
||||
self.errors.append(f"第【{row_num + 1}】行,错误原因: {error}")
|
||||
except Exception as e:
|
||||
|
@ -44,11 +45,22 @@ class ExcelDataSaver:
|
|||
return len(self.errors) == 0
|
||||
|
||||
def save_data(self):
|
||||
errors = []
|
||||
row_counter = 0
|
||||
|
||||
if self.validate_data():
|
||||
try:
|
||||
with transaction.atomic():
|
||||
for row in self.data:
|
||||
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 False
|
||||
|
||||
|
|
Loading…
Reference in New Issue