from apps.utils.constants import EXCLUDE_FIELDS from apps.utils.serializers import CustomModelSerializer from rest_framework import serializers from apps.wpm.models import SfLog, StLog, StSfLog from apps.system.models import Dictionary class StLogSerializer(CustomModelSerializer): mgroup_name = serializers.CharField(source='mgroup.name', read_only=True) class Meta: model = StLog fields = '__all__' class SfLogSerializer(CustomModelSerializer): mgroup_name = serializers.CharField(source='mgroup.name', read_only=True) team_name = serializers.CharField(source='team.name', read_only=True) shift_name = serializers.CharField(source='shift.name', read_only=True) leader_name = serializers.CharField(source='leader.name', read_only=True) class Meta: model = SfLog fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['leader', 'qua_data', 'cal_time', 'elec_val'] update_fields = ['start_time', 'end_time', 'note'] def validate(self, attrs): attrs['leader'] = attrs['mgroup'].leader return super().validate(attrs) def to_internal_value(self, data): if hasattr(self.Meta, 'update_fields') and self.context['request'].method in ['PUT', 'PATCH']: u_fields = self.Meta.update_fields new_data = {key: data[key] for key in u_fields if key in data} return super().to_internal_value(new_data) return super().to_internal_value(data) class StSfLogSerializer(CustomModelSerializer): stlog_ = StLogSerializer(source='stlog', read_only=True) sflog_ = SfLogSerializer(source='sflog', read_only=True) class Meta: model = StSfLog fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['stlog', 'sflog', 'is_current_down'] class QItemDataSerializer(serializers.Serializer): qitem = serializers.PrimaryKeyRelatedField(label='检测项目', queryset=Dictionary.objects.filter(type__code='qitem')) val = serializers.FloatField(label='值') class SfLogQuaSerializer(serializers.Serializer): qua_data = QItemDataSerializer(many=True)