From 14c212a484e1477f2adea07446eb6ce82b7ac741 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 28 Jun 2023 10:09:15 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20=E5=AF=BC=E5=85=A5=E6=97=B6=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E6=A0=A1=E9=AA=8C=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/supervision/serializers.py | 10 ++++++++-- server/apps/supervision/views.py | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/server/apps/supervision/serializers.py b/server/apps/supervision/serializers.py index a96cb31..b348dbf 100644 --- a/server/apps/supervision/serializers.py +++ b/server/apps/supervision/serializers.py @@ -3,6 +3,7 @@ from rest_framework import serializers from .models import * from apps.system.serializers import OrganizationSerializer,FileListSerializer,UserSimpleSerializer,OrganizationSimpleSerializer, FileSimpleSerializer from rest_framework.exceptions import ParseError +import datetime class ContentSerializer(serializers.ModelSerializer): @@ -163,12 +164,17 @@ class PgoalDeptSerializer(serializers.ModelSerializer): return attrs class RcSerializer(ValidateMixin, serializers.ModelSerializer): - + date_issue = serializers.DateTimeField(input_formats=['%Y-%m-%d'], required=False) + date_accept = serializers.DateTimeField(input_formats=['%Y-%m-%d'], required=False) + date_expect = serializers.DateTimeField(input_formats=['%Y-%m-%d'], required=False) class Meta(BaseMeta): model = Rc + class ComplaintSerializer(ValidateMixin, serializers.ModelSerializer): + date_occurrence = serializers.DateTimeField(input_formats=['%Y-%m-%d']) + date_feedback = serializers.DateTimeField(input_formats=['%Y-%m-%d']) class Meta(BaseMeta): model = Complaint @@ -183,7 +189,7 @@ class RiskSerializer(ValidateMixin, serializers.ModelSerializer): model = Risk class OinspectSerializer(ValidateMixin, serializers.ModelSerializer): - + date_inspect = serializers.DateTimeField(input_formats=['%Y-%m-%d']) class Meta(BaseMeta): model = Oinspect diff --git a/server/apps/supervision/views.py b/server/apps/supervision/views.py index b79ca3c..0adb902 100644 --- a/server/apps/supervision/views.py +++ b/server/apps/supervision/views.py @@ -630,6 +630,7 @@ class ImpMixin: datalist.append(data) i = i + 1 sr = mySerializer(data=datalist, many=True, context={'request': request}) + print(sr) sr.is_valid() err_msg = '' for ind, val in enumerate(sr.errors): From b03384ea61dc897d6e88e78b50fb94b75ae98089 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 28 Jun 2023 10:22:30 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=E5=AF=BC=E5=85=A5=E6=97=B6=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E6=A0=A1=E9=AA=8C=E5=A4=B1=E8=B4=A52?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/supervision/serializers.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/server/apps/supervision/serializers.py b/server/apps/supervision/serializers.py index b348dbf..b6209f7 100644 --- a/server/apps/supervision/serializers.py +++ b/server/apps/supervision/serializers.py @@ -162,19 +162,25 @@ class PgoalDeptSerializer(serializers.ModelSerializer): attrs['year'] = task2do.task2.year attrs['belong_dept'] = task2do.belong_dept return attrs + +class DateField(serializers.DateTimeField): + def to_representation(self, value): + if isinstance(value, datetime.date): + value = value.strftime('%Y-%m-%d') + return super().to_representation(value) class RcSerializer(ValidateMixin, serializers.ModelSerializer): - date_issue = serializers.DateTimeField(input_formats=['%Y-%m-%d'], required=False) - date_accept = serializers.DateTimeField(input_formats=['%Y-%m-%d'], required=False) - date_expect = serializers.DateTimeField(input_formats=['%Y-%m-%d'], required=False) + date_issue = DateField(required=False) + date_accept = DateField(required=False) + date_expect = DateField(required=False) class Meta(BaseMeta): model = Rc class ComplaintSerializer(ValidateMixin, serializers.ModelSerializer): - date_occurrence = serializers.DateTimeField(input_formats=['%Y-%m-%d']) - date_feedback = serializers.DateTimeField(input_formats=['%Y-%m-%d']) + date_occurrence = DateField() + date_feedback = DateField() class Meta(BaseMeta): model = Complaint @@ -189,7 +195,7 @@ class RiskSerializer(ValidateMixin, serializers.ModelSerializer): model = Risk class OinspectSerializer(ValidateMixin, serializers.ModelSerializer): - date_inspect = serializers.DateTimeField(input_formats=['%Y-%m-%d']) + date_inspect = DateField() class Meta(BaseMeta): model = Oinspect From a6c3e0fd48af55f4ce6bb4aa63cd2cdb09e34048 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 28 Jun 2023 10:57:11 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=E5=AF=BC=E5=85=A5=E6=97=B6=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E6=A0=A1=E9=AA=8C=E5=A4=B1=E8=B4=A53?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/supervision/serializers.py | 28 +++++++++++++++++++------- server/apps/supervision/views.py | 26 ++++++++++++++++-------- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/server/apps/supervision/serializers.py b/server/apps/supervision/serializers.py index b6209f7..26ca182 100644 --- a/server/apps/supervision/serializers.py +++ b/server/apps/supervision/serializers.py @@ -163,24 +163,38 @@ class PgoalDeptSerializer(serializers.ModelSerializer): attrs['belong_dept'] = task2do.belong_dept 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): if isinstance(value, datetime.date): value = value.strftime('%Y-%m-%d') return super().to_representation(value) class RcSerializer(ValidateMixin, serializers.ModelSerializer): - date_issue = DateField(required=False) - date_accept = DateField(required=False) - date_expect = DateField(required=False) + # date_issue = DateField(required=False, allow_null=True) + # date_accept = DateField(required=False, allow_null=True) + # date_expect = DateField(required=False, allow_null=True) class Meta(BaseMeta): model = Rc class ComplaintSerializer(ValidateMixin, serializers.ModelSerializer): - date_occurrence = DateField() - date_feedback = DateField() + # date_occurrence = DateField() + # date_feedback = DateField() class Meta(BaseMeta): model = Complaint @@ -195,7 +209,7 @@ class RiskSerializer(ValidateMixin, serializers.ModelSerializer): model = Risk class OinspectSerializer(ValidateMixin, serializers.ModelSerializer): - date_inspect = DateField() + # date_inspect = DateField() class Meta(BaseMeta): model = Oinspect diff --git a/server/apps/supervision/views.py b/server/apps/supervision/views.py index 0adb902..23ab317 100644 --- a/server/apps/supervision/views.py +++ b/server/apps/supervision/views.py @@ -12,6 +12,7 @@ from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet, ModelViewSet from utils.pagination import PageOrNot from openpyxl import load_workbook +import datetime from apps.system.mixins import CreateUpdateCustomMixin from apps.system.models import Organization @@ -601,6 +602,16 @@ class PgoalDeptViewSet(Domixin, CreateUpdateCustomMixin, ModelViewSet): self.countup_task2do(instance.task2do) 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): for i in atuple: if i[1] == val: @@ -630,7 +641,6 @@ class ImpMixin: datalist.append(data) i = i + 1 sr = mySerializer(data=datalist, many=True, context={'request': request}) - print(sr) sr.is_valid() err_msg = '' 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_correct'] = sheet['c'+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: data['number'] = sheet['b'+str(i)].value - data['date_accept'] = sheet['c'+str(i)].value - data['date_expect'] = sheet['d'+str(i)].value - data['date_issue'] = sheet['e'+str(i)].value + data['date_accept'] = self.format_date(i, sheet['c'+str(i)].value) + data['date_expect'] = self.format_date(i, sheet['d'+str(i)].value) + data['date_issue'] = self.format_date(i, sheet['e'+str(i)].value) data['remark'] = sheet['f'+str(i)].value return data @@ -701,9 +711,9 @@ class ComplaintViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet) def make_data(self, data, sheet, i, etype): 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['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 return data @@ -781,7 +791,7 @@ class OinspectViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet): def make_data(self, data, sheet, i, etype): data['cate'] = self.get_enum(sheet['b'+str(i)].value, Oinspect.oinspect_cate_choices, i) 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 return data From 4ba44cdf94f65bbd47fe132c8af5bd7089c0a917 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 28 Jun 2023 12:12:39 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=E5=AF=BC=E5=85=A5=E6=97=B6=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E6=A0=A1=E9=AA=8C=E5=A4=B1=E8=B4=A54?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/supervision/views.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/apps/supervision/views.py b/server/apps/supervision/views.py index 23ab317..726506a 100644 --- a/server/apps/supervision/views.py +++ b/server/apps/supervision/views.py @@ -608,6 +608,11 @@ class ImpMixin: new_val = val.date() elif isinstance(val, datetime.date): new_val = val + elif isinstance(val, str): + try: + new_val = datetime.datetime.strptime(val, '%Y-%m-%d').date() + except ValueError: + raise ParseError(f'第{ind}行, 日期时间格式错误') else: raise ParseError(f'第{ind}行, 日期时间格式错误') return new_val