fix: 导入时日期校验失败3

This commit is contained in:
caoqianming 2023-06-28 10:57:11 +08:00
parent b03384ea61
commit a6c3e0fd48
2 changed files with 39 additions and 15 deletions

View File

@ -163,24 +163,38 @@ class PgoalDeptSerializer(serializers.ModelSerializer):
attrs['belong_dept'] = task2do.belong_dept attrs['belong_dept'] = task2do.belong_dept
return attrs return attrs
class DateField(serializers.DateTimeField): class DateField(serializers.Field):
def to_internal_value(self, value):
if isinstance(value, datetime.datetime):
return value
elif isinstance(value, datetime.date):
return value
try:
date_obj = datetime.datetime.strptime(value, '%Y-%m-%d %H:%M:%S').date()
except ValueError:
try:
date_obj = datetime.datetime.strptime(value, '%Y-%m-%d').date()
except ValueError:
raise serializers.ValidationError("日期格式错误")
return date_obj
def to_representation(self, value): def to_representation(self, value):
if isinstance(value, datetime.date): if isinstance(value, datetime.date):
value = value.strftime('%Y-%m-%d') value = value.strftime('%Y-%m-%d')
return super().to_representation(value) return super().to_representation(value)
class RcSerializer(ValidateMixin, serializers.ModelSerializer): class RcSerializer(ValidateMixin, serializers.ModelSerializer):
date_issue = DateField(required=False) # date_issue = DateField(required=False, allow_null=True)
date_accept = DateField(required=False) # date_accept = DateField(required=False, allow_null=True)
date_expect = DateField(required=False) # date_expect = DateField(required=False, allow_null=True)
class Meta(BaseMeta): class Meta(BaseMeta):
model = Rc model = Rc
class ComplaintSerializer(ValidateMixin, serializers.ModelSerializer): class ComplaintSerializer(ValidateMixin, serializers.ModelSerializer):
date_occurrence = DateField() # date_occurrence = DateField()
date_feedback = DateField() # date_feedback = DateField()
class Meta(BaseMeta): class Meta(BaseMeta):
model = Complaint model = Complaint
@ -195,7 +209,7 @@ class RiskSerializer(ValidateMixin, serializers.ModelSerializer):
model = Risk model = Risk
class OinspectSerializer(ValidateMixin, serializers.ModelSerializer): class OinspectSerializer(ValidateMixin, serializers.ModelSerializer):
date_inspect = DateField() # date_inspect = DateField()
class Meta(BaseMeta): class Meta(BaseMeta):
model = Oinspect model = Oinspect

View File

@ -12,6 +12,7 @@ from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet, ModelViewSet from rest_framework.viewsets import GenericViewSet, ModelViewSet
from utils.pagination import PageOrNot from utils.pagination import PageOrNot
from openpyxl import load_workbook from openpyxl import load_workbook
import datetime
from apps.system.mixins import CreateUpdateCustomMixin from apps.system.mixins import CreateUpdateCustomMixin
from apps.system.models import Organization from apps.system.models import Organization
@ -601,6 +602,16 @@ class PgoalDeptViewSet(Domixin, CreateUpdateCustomMixin, ModelViewSet):
self.countup_task2do(instance.task2do) self.countup_task2do(instance.task2do)
class ImpMixin: class ImpMixin:
def format_date(self, ind, val):
new_val = val
if isinstance(val, datetime.datetime):
new_val = val.date()
elif isinstance(val, datetime.date):
new_val = val
else:
raise ParseError(f'{ind}行, 日期时间格式错误')
return new_val
def get_enum(self, val, atuple, ind): def get_enum(self, val, atuple, ind):
for i in atuple: for i in atuple:
if i[1] == val: if i[1] == val:
@ -630,7 +641,6 @@ class ImpMixin:
datalist.append(data) datalist.append(data)
i = i + 1 i = i + 1
sr = mySerializer(data=datalist, many=True, context={'request': request}) sr = mySerializer(data=datalist, many=True, context={'request': request})
print(sr)
sr.is_valid() sr.is_valid()
err_msg = '' err_msg = ''
for ind, val in enumerate(sr.errors): for ind, val in enumerate(sr.errors):
@ -660,12 +670,12 @@ class RcViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet):
data['number'] = sheet['b'+str(i)].value data['number'] = sheet['b'+str(i)].value
data['number_correct'] = sheet['c'+str(i)].value data['number_correct'] = sheet['c'+str(i)].value
data['reason_error'] = sheet['d'+str(i)].value data['reason_error'] = sheet['d'+str(i)].value
data['date_issue'] = sheet['e'+str(i)].value data['date_issue'] = self.format_date(i, sheet['e'+str(i)].value)
else: else:
data['number'] = sheet['b'+str(i)].value data['number'] = sheet['b'+str(i)].value
data['date_accept'] = sheet['c'+str(i)].value data['date_accept'] = self.format_date(i, sheet['c'+str(i)].value)
data['date_expect'] = sheet['d'+str(i)].value data['date_expect'] = self.format_date(i, sheet['d'+str(i)].value)
data['date_issue'] = sheet['e'+str(i)].value data['date_issue'] = self.format_date(i, sheet['e'+str(i)].value)
data['remark'] = sheet['f'+str(i)].value data['remark'] = sheet['f'+str(i)].value
return data return data
@ -701,9 +711,9 @@ class ComplaintViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet)
def make_data(self, data, sheet, i, etype): def make_data(self, data, sheet, i, etype):
data['complainant'] = sheet['b'+str(i)].value data['complainant'] = sheet['b'+str(i)].value
data['date_occurrence'] = sheet['c'+str(i)].value data['date_occurrence'] = self.format_date(i, sheet['c'+str(i)].value)
data['content'] = sheet['d'+str(i)].value data['content'] = sheet['d'+str(i)].value
data['date_feedback'] = sheet['e'+str(i)].value data['date_feedback'] = self.format_date(i, sheet['e'+str(i)].value)
data['is_satisfied'] = True if sheet['f'+str(i)].value == '' else False data['is_satisfied'] = True if sheet['f'+str(i)].value == '' else False
return data return data
@ -781,7 +791,7 @@ class OinspectViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet):
def make_data(self, data, sheet, i, etype): def make_data(self, data, sheet, i, etype):
data['cate'] = self.get_enum(sheet['b'+str(i)].value, Oinspect.oinspect_cate_choices, i) data['cate'] = self.get_enum(sheet['b'+str(i)].value, Oinspect.oinspect_cate_choices, i)
data['checker'] = sheet['c'+str(i)].value data['checker'] = sheet['c'+str(i)].value
data['date_inspect'] = sheet['d'+str(i)].value data['date_inspect'] = self.format_date(i, sheet['d'+str(i)].value)
data['result'] = sheet['e'+str(i)].value data['result'] = sheet['e'+str(i)].value
return data return data