cma_search/server/apps/quality/serializers.py

141 lines
4.9 KiB
Python

from re import template
from django.db.models.base import Model
from rest_framework import serializers
from .models import *
from apps.system.serializers import OrganizationSerializer,FileListSerializer,UserSimpleSerializer,OrganizationSimpleSerializer, FileSimpleSerializer
from rest_framework.exceptions import ParseError
class InspectItemSerializer(serializers.ModelSerializer):
cate_name = serializers.StringRelatedField(source='cate', read_only=True)
class Meta:
model = InspectItem
fields = '__all__'
@staticmethod
def setup_eager_loading(queryset):
queryset = queryset.select_related('cate')
return queryset
class InspectItemSimpleSerializer(serializers.ModelSerializer):
# cate_name = serializers.StringRelatedField(source='cate', read_only=True)
class Meta:
model = InspectItem
fields = ['id', 'name', 'type', 'sortnum']
# @staticmethod
# def setup_eager_loading(queryset):
# queryset = queryset.select_related('cate')
# return queryset
class InspectTaskSerializer(serializers.ModelSerializer):
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
dept_count = serializers.SerializerMethodField()
subtask_count = serializers.SerializerMethodField()
template_name = serializers.CharField(source='template.name', read_only=True)
class Meta:
model = InspectTask
fields = '__all__'
def get_dept_count(self, obj):
return InspectDept.objects.filter(subtask__inspecttask=obj, is_deleted=False).count()
def get_subtask_count(self, obj):
return SubInspectTask.objects.filter(inspecttask=obj, is_deleted=False).count()
@staticmethod
def setup_eager_loading(queryset):
queryset = queryset.select_related('template',)
return queryset
class InspectTaskSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = InspectTask
fields = ['id', 'name', 'start_date', 'end_date']
class SubtaskListSerializer(serializers.ModelSerializer):
inspecttask_ = InspectTaskSimpleSerializer(source='inspecttask', read_only=True)
members = serializers.SerializerMethodField()
depts_count = serializers.SerializerMethodField()
class Meta:
model = SubInspectTask
fields = '__all__'
def get_members(self, obj):
return obj.team_subtask.values('member', 'member__name', 'type')
def get_depts_count(self, obj):
return obj.dept_subtask.count()
@staticmethod
def setup_eager_loading(queryset):
queryset = queryset.select_related('inspecttask',)
queryset = queryset.prefetch_related('team_subtask','dept_subtask')
return queryset
class InspectRecordListSerializer(serializers.ModelSerializer):
item_ = InspectItemSimpleSerializer(source='item', read_only=True)
checker_ = UserSimpleSerializer(source='checker', read_only=True)
class Meta:
model = InspectRecord
exclude = ['imgs']
@staticmethod
def setup_eager_loading(queryset):
queryset = queryset.select_related('item', 'checker')
return queryset
class InspectRecordDetailSerializer(serializers.ModelSerializer):
item_ = InspectItemSerializer(source='item', read_only=True)
checker_ = UserSimpleSerializer(source='checker', read_only=True)
imgs_ = FileSimpleSerializer(source='imgs', many=True, read_only=True)
class Meta:
model = InspectRecord
fields = '__all__'
@staticmethod
def setup_eager_loading(queryset):
queryset = queryset.select_related('item', 'checker')
queryset = queryset.prefetch_related('imgs',)
return queryset
class InspectDeptSerializer(serializers.ModelSerializer):
dept__name = serializers.CharField(source='dept.name', read_only=True)
leader = serializers.SerializerMethodField()
class Meta:
model = InspectDept
fields = ('dept', 'dept__name', 'state', 'subtask', 'id', 'note', 'leader', 'start_date')
@staticmethod
def setup_eager_loading(queryset):
queryset = queryset.select_related('dept', 'subtask')
return queryset
def get_leader(self, obj):
return InspectTeam.objects.filter(subtask=obj.subtask).first().member.pk
class InspectRecordCheckSerializer(serializers.ModelSerializer):
"""
提交检查结果序列化
"""
class Meta:
model = InspectRecord
fields = ['id', 'result', 'note', 'imgs']
def validate_result(self, result):
if result:
if result == '发现':
if not (self.initial_data['note'] or self.initial_data['imgs']):
raise ParseError('发现问题请填写说明或上传图片')
else:
raise ParseError('未填写检查结果')
return result
class InspectTemplateSerializer(serializers.ModelSerializer):
class Meta:
model = InspectTemplate
fields = '__all__'