diff --git a/server/apps/ability/serializers_qtask.py b/server/apps/ability/serializers_qtask.py index c16835d..ef5b1ef 100644 --- a/server/apps/ability/serializers_qtask.py +++ b/server/apps/ability/serializers_qtask.py @@ -1,9 +1,9 @@ from rest_framework import serializers -from apps.system.models import City, Organization +from apps.system.models import City, Organization, Province from .models import QAction, QActionItem, QOrg, QTask, Quali, QualiLib from django.db import transaction -from apps.system.serializers import OrganizationSimpleSerializer, DictSerializer +from apps.system.serializers import CitySerializer, FileSimpleSerializer, OrganizationSimpleSerializer, DictSerializer, UserSimpleSerializer from rest_framework.exceptions import ParseError @@ -15,7 +15,8 @@ class QualiLibListSerializer(serializers.ModelSerializer): class QualiListSerializer(serializers.ModelSerializer): province_name = serializers.CharField(source='province.name', read_only=True) city_name = serializers.CharField(source='city.name', read_only=True) - service = serializers.CharField(source='org.service', read_only=True) + org_ = OrganizationSimpleSerializer(source='org', read_only=True) + citys_ = CitySerializer(source='citys', many=True, read_only=True) class Meta: model = Quali fields = '__all__' @@ -78,6 +79,8 @@ class QActionListSerializer(serializers.ModelSerializer): quali_name = serializers.CharField(source='quali.name', read_only=True) atype_name = serializers.CharField(source='atype.name', read_only=True) afield_name = serializers.CharField(source='afield.name', read_only=True) + file_ = FileSimpleSerializer(source='file', read_only=True) + create_by_ = UserSimpleSerializer(source='create_by', read_only=True) class Meta: model = QAction fields = '__all__' @@ -157,6 +160,17 @@ class QActionItemSerializer(serializers.ModelSerializer): class QActionDetailSerializer(serializers.ModelSerializer): update_detail = QActionItemSerializer(source='items_qaction', many=True, read_only=True) + value2 = serializers.SerializerMethodField() class Meta: model = QAction - fields ='__all__' \ No newline at end of file + fields ='__all__' + + def get_value2(self, obj): + value2 = obj.value2 + if 'province' in value2: + value2['province_name'] = Province.objects.get(id=value2['province']).name + if 'city' in value2: + value2['city_name'] = City.objects.get(id=value2['city']).name + if 'citys' in value2: + value2['citys_'] = CitySerializer(instance=City.objects.filter(id__in=value2['citys']), many=True).data + return value2 \ No newline at end of file diff --git a/server/apps/ability/views_qtask.py b/server/apps/ability/views_qtask.py index c1b56f2..56d5966 100644 --- a/server/apps/ability/views_qtask.py +++ b/server/apps/ability/views_qtask.py @@ -1,5 +1,5 @@ from rest_framework.viewsets import GenericViewSet -from rest_framework.mixins import ListModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin, RetrieveModelMixin +from rest_framework.mixins import ListModelMixin, RetrieveModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin, RetrieveModelMixin from rest_framework.decorators import action from apps.ability.models import QAction, QActionItem, QOrg, QTask, Quali, QualiLib from apps.ability.serializers_qtask import QActionACreateSerializer, QActionDetailSerializer, QActionListSerializer, QActionQualiCreateSerializer, QActionQualiUpdateSerializer, QActionServiceSerializer, QOrgListSerializer, QTaskCreateUpdateSerializer, QTaskListSerializer, QualiCreateSerializer, QualiLibListSerializer, QualiListSerializer, QualiSerializer, QualiUpdateSerializer @@ -20,9 +20,9 @@ class QualiLibViewSet(PageOrNot, ListModelMixin, GenericViewSet): search_fields = ['name'] ordering = ['-create_time'] -class QualiViewSet(ListModelMixin, GenericViewSet): +class QualiViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet): perms_map = {'get': '*'} - queryset = Quali.objects.all() + queryset = Quali.objects.select_related('org', 'province', 'city').prefetch_related('citys') serializer_class = QualiListSerializer search_fields = ['name', 'type', 'grade', 'scope', 'level', 'description'] ordering = ['org', 'org__sort', 'create_time'] @@ -99,8 +99,8 @@ def cal_count(qtask, org): qorg.save() class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModelMixin,GenericViewSet): - perms_map = {'get': 'qtask_view'} - queryset = QAction.objects.select_related('file', 'atype', 'afield', 'qtask', 'belong_dept') + perms_map = {'get': 'qtask_view', 'delete': 'qaction_delete'} + queryset = QAction.objects.select_related('file', 'atype', 'afield', 'qtask', 'belong_dept', 'create_by') filterset_fields = ['qtask', 'belong_dept', 'atype', 'afield'] serializer_class = QActionListSerializer @@ -130,7 +130,8 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel def perform_destroy(self, instance): if not instance.confirmed: instance.delete(soft=False) - raise ParseError('报送已确认, 不可删除') + else: + raise ParseError('报送已确认, 不可删除') @action(methods=['post'], detail=False, perms_map = {'post':'qaction_create'}, serializer_class=QActionServiceSerializer) @@ -174,11 +175,13 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel serializer.is_valid(raise_exception=True) obj = serializer.save(create_by=user, belong_dept=user.dept) vdata = serializer.validated_data + value2 = request.data.get('value2', {}) # 比较差别 - quali = Quali.objects.get(id=obj.value2.get('id')) - old_data = QualiSerializer(instance=quali).data + quali = Quali.objects.get(id=value2.get('id')) + old_data = QualiListSerializer(instance=quali).data obj.value1 = old_data - for k, v in obj.value2.items(): + obj.save() + for k, v in value2.items(): if v != old_data[k]: QActionItem.objects.create(action='update', field=k, value1=old_data[k], value2=v, qaction=obj) if k == 'citys':