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, TestRecordItem from django.db import transaction 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 TestRecordItemCreateSerializer(serializers.ModelSerializer): class Meta: model = TestRecordItem fields = ['form_field', 'field_value', 'is_testok'] class TestRecordItemUpdateSerializer(serializers.ModelSerializer): class Meta: model = TestRecordItem fields = ['id', 'field_value', 'is_testok', 'is_hidden'] class TestRecordItemSerializer(serializers.ModelSerializer): need_judge = serializers.BooleanField(source='form_field__need_judge', read_only=True) rule_expression = serializers.JSONField(source='form_field__rule_expression', read_only=True) display_expression = serializers.JSONField(source='form_field__display_expression', read_only=True) is_hidden = serializers.BooleanField(source='form_field__is_hidden', read_only=True) help_text = serializers.CharField(source='form_field__help_text', read_only=True) sort = serializers.IntegerField(source='form_field__sort', read_only=True) class Meta: model = TestRecordItem fields = '__all__' class TestRecordCreateSerializer(serializers.ModelSerializer): record_data = TestRecordItemCreateSerializer(many=True) class Meta: model = TestRecord fields = ['form', 'record_data', 'is_testok', 'fifo_item'] class TestRecordListSerializer(serializers.ModelSerializer): form_ = RecordFormSimpleSerializer(source='form', read_only=True) class Meta: model = TestRecord fields = '__all__' class TestRecordDetailBaseSerializer(serializers.ModelSerializer): form_ = RecordFormSimpleSerializer(source='form', read_only=True) record_data = TestRecordItemSerializer(source='item_test_record', read_only=True, many=True) class Meta: model = TestRecord fields = '__all__' class TestRecordDetailSerializer(serializers.ModelSerializer): form_ = RecordFormSimpleSerializer(source='form', read_only=True) record_data = TestRecordItemSerializer(source='item_test_record', read_only=True, many=True) # record_data_ = serializers.SerializerMethodField() origin_test_ = TestRecordDetailBaseSerializer(source='origin_test', read_only=True) class Meta: model = TestRecord fields = '__all__' # def get_record_data_(self, obj): # items_data = TestRecordItemSerializer(instance=obj.item_test_record, many=True).data # if obj.origin_test and obj.type == TestRecord.TEST_PROCESS_RE: # origin_ def to_representation(self, instance): ret = super().to_representation(instance) if instance.origin_test and instance.type == TestRecord.TEST_PROCESS_RE: origin_test = ret['origin_test'] o_dict = {} for i in origin_test['record_data']: o_dict[i['field_key']] = i['field_value'] for i in ret['record_data']: i['origin_value'] = o_dict[i['field_key']] if i['field_key'] in o_dict else None return super().to_representation(instance) class TestRecordUpdateSerializer(serializers.ModelSerializer): record_data = TestRecordItemUpdateSerializer(source='item_test_record', many=True) class Meta: model = TestRecord fields = ['is_testok', 'record_data'] def update(self, instance, validated_data): with transaction.atomic(): record_data = validated_data.pop(validated_data) for attr, value in validated_data.items(): setattr(instance, attr, value) instance.save() self.record_data.save() return instance