修复了excel表格上传回滚问题
This commit is contained in:
parent
5b7cc3c703
commit
2fbe6626b7
|
@ -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 = '集团经营目标表'
|
||||||
|
|
|
@ -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():
|
||||||
|
try:
|
||||||
|
with transaction.atomic():
|
||||||
for row in self.data:
|
for row in self.data:
|
||||||
row_data = {self.field_mapping[field]: value for field, value in row.items() if field in self.field_mapping}
|
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 = self.model(**row_data)
|
||||||
instance.save()
|
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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue