This commit is contained in:
shijing 2022-06-02 17:02:13 +08:00
commit fe4be749e3
2 changed files with 30 additions and 13 deletions

View File

@ -1,9 +1,9 @@
from rest_framework import serializers 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 .models import QAction, QActionItem, QOrg, QTask, Quali, QualiLib
from django.db import transaction 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 from rest_framework.exceptions import ParseError
@ -15,7 +15,8 @@ class QualiLibListSerializer(serializers.ModelSerializer):
class QualiListSerializer(serializers.ModelSerializer): class QualiListSerializer(serializers.ModelSerializer):
province_name = serializers.CharField(source='province.name', read_only=True) province_name = serializers.CharField(source='province.name', read_only=True)
city_name = serializers.CharField(source='city.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: class Meta:
model = Quali model = Quali
fields = '__all__' fields = '__all__'
@ -78,6 +79,8 @@ class QActionListSerializer(serializers.ModelSerializer):
quali_name = serializers.CharField(source='quali.name', read_only=True) quali_name = serializers.CharField(source='quali.name', read_only=True)
atype_name = serializers.CharField(source='atype.name', read_only=True) atype_name = serializers.CharField(source='atype.name', read_only=True)
afield_name = serializers.CharField(source='afield.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: class Meta:
model = QAction model = QAction
fields = '__all__' fields = '__all__'
@ -157,6 +160,17 @@ class QActionItemSerializer(serializers.ModelSerializer):
class QActionDetailSerializer(serializers.ModelSerializer): class QActionDetailSerializer(serializers.ModelSerializer):
update_detail = QActionItemSerializer(source='items_qaction', many=True, read_only=True) update_detail = QActionItemSerializer(source='items_qaction', many=True, read_only=True)
value2 = serializers.SerializerMethodField()
class Meta: class Meta:
model = QAction model = QAction
fields ='__all__' 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

View File

@ -1,5 +1,5 @@
from rest_framework.viewsets import GenericViewSet 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 rest_framework.decorators import action
from apps.ability.models import QAction, QActionItem, QOrg, QTask, Quali, QualiLib 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 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'] search_fields = ['name']
ordering = ['-create_time'] ordering = ['-create_time']
class QualiViewSet(ListModelMixin, GenericViewSet): class QualiViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
perms_map = {'get': '*'} perms_map = {'get': '*'}
queryset = Quali.objects.all() queryset = Quali.objects.select_related('org', 'province', 'city').prefetch_related('citys')
serializer_class = QualiListSerializer serializer_class = QualiListSerializer
search_fields = ['name', 'type', 'grade', 'scope', 'level', 'description'] search_fields = ['name', 'type', 'grade', 'scope', 'level', 'description']
ordering = ['org', 'org__sort', 'create_time'] ordering = ['org', 'org__sort', 'create_time']
@ -99,8 +99,8 @@ def cal_count(qtask, org):
qorg.save() qorg.save()
class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModelMixin,GenericViewSet): class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModelMixin,GenericViewSet):
perms_map = {'get': 'qtask_view'} perms_map = {'get': 'qtask_view', 'delete': 'qaction_delete'}
queryset = QAction.objects.select_related('file', 'atype', 'afield', 'qtask', 'belong_dept') queryset = QAction.objects.select_related('file', 'atype', 'afield', 'qtask', 'belong_dept', 'create_by')
filterset_fields = ['qtask', 'belong_dept', 'atype', 'afield'] filterset_fields = ['qtask', 'belong_dept', 'atype', 'afield']
serializer_class = QActionListSerializer serializer_class = QActionListSerializer
@ -130,7 +130,8 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel
def perform_destroy(self, instance): def perform_destroy(self, instance):
if not instance.confirmed: if not instance.confirmed:
instance.delete(soft=False) instance.delete(soft=False)
raise ParseError('报送已确认, 不可删除') else:
raise ParseError('报送已确认, 不可删除')
@action(methods=['post'], detail=False, @action(methods=['post'], detail=False,
perms_map = {'post':'qaction_create'}, serializer_class=QActionServiceSerializer) perms_map = {'post':'qaction_create'}, serializer_class=QActionServiceSerializer)
@ -174,11 +175,13 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
obj = serializer.save(create_by=user, belong_dept=user.dept) obj = serializer.save(create_by=user, belong_dept=user.dept)
vdata = serializer.validated_data vdata = serializer.validated_data
value2 = request.data.get('value2', {})
# 比较差别 # 比较差别
quali = Quali.objects.get(id=obj.value2.get('id')) quali = Quali.objects.get(id=value2.get('id'))
old_data = QualiSerializer(instance=quali).data old_data = QualiListSerializer(instance=quali).data
obj.value1 = old_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]: if v != old_data[k]:
QActionItem.objects.create(action='update', field=k, value1=old_data[k], value2=v, qaction=obj) QActionItem.objects.create(action='update', field=k, value1=old_data[k], value2=v, qaction=obj)
if k == 'citys': if k == 'citys':