from rest_framework import serializers from apps.mtm.models import RecordForm, RecordFormField from apps.mtm.serializers import RecordFormFieldSerializer, RecordFormSimpleSerializer from apps.system.serializers import FileSimpleSerializer from .models import Standard, TestItem, TestRecord class StandardCreateUpdateSerializer(serializers.ModelSerializer): class Meta: model = Standard fields = ['name', 'file', 'enabled', 'number'] class StandardSerializer(serializers.ModelSerializer): file_ = FileSimpleSerializer(source='file', read_only=True) class Meta: model = Standard fields = '__all__' class StandardSimpleSerializer(serializers.ModelSerializer): class Meta: model = Standard fields = ['id', 'name', 'number'] class TestItemCreateUpdateSerializer(serializers.ModelSerializer): class Meta: model = TestItem fields = ['name', 'standard', 'term_number'] class TestItemSerializer(serializers.ModelSerializer): standard_ = StandardSimpleSerializer(source='standard', read_only=True) class Meta: model = TestItem fields = '__all__' class AnalysisItemSerializer(serializers.ModelSerializer): pass class TestRecordCreateSerializer(serializers.ModelSerializer): class Meta: model = TestRecord fields = ['form', 'record_data', 'is_testok', 'fifo_detail'] def create(self, validated_data): if 'is_testok' not in validated_data: raise serializers.ValidationError('未填写检测结论') return super().create(validated_data) class TestRecordListSerializer(serializers.ModelSerializer): class Meta: model = TestRecord fields = '__all__' class TestRecordDetailSerializer(serializers.ModelSerializer): form_ = RecordFormSimpleSerializer(source='form', read_only=True) record_data_ = serializers.SerializerMethodField() class Meta: model = TestRecord fields = '__all__' @staticmethod def setup_eager_loading(queryset): queryset = queryset.select_related('form','fifo_detail') return queryset def get_record_data_(self, obj): record_data = obj.record_data all_fields = RecordFormField.objects.filter(form=obj.form, is_deletd=False).order_by('sort') all_fields_l = RecordFormFieldSerializer(instance=all_fields, many=True).data for i in all_fields_l: key = i['field_key'] i['field_value'] = record_data.get(key, None) return all_fields_l