From 2fbe6626b7a25b0c21edc74584c2d2e6208ddcca Mon Sep 17 00:00:00 2001 From: sichan Date: Tue, 18 Jun 2024 04:42:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86excel=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E4=B8=8A=E4=BC=A0=E5=9B=9E=E6=BB=9A=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/perf_mgnt/models.py | 10 ++++++++++ excel_parser/utils.py | 22 +++++++++++++++++----- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/application/perf_mgnt/models.py b/application/perf_mgnt/models.py index 7df026c..932313a 100644 --- a/application/perf_mgnt/models.py +++ b/application/perf_mgnt/models.py @@ -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 = '集团经营目标表' diff --git a/excel_parser/utils.py b/excel_parser/utils.py index 0b06693..1742a37 100644 --- a/excel_parser/utils.py +++ b/excel_parser/utils.py @@ -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(): - 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() + 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