hberp/hb_server/apps/qm/serializers.py

118 lines
4.7 KiB
Python

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):
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