from apps.utils.serializers import CustomModelSerializer from apps.enm.models import Mpoint, Mgroup, MpLog, Team, SfLog, StLog, StSfLog from apps.system.models import Dept from apps.system.serializers import DeptSimpleSerializer from apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE from rest_framework import serializers class MgroupSerializer(CustomModelSerializer): belong_dept = serializers.PrimaryKeyRelatedField(label="所属部门", queryset=Dept.objects.all(), required=True) belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True) class Meta: model = Mgroup fields = '__all__' read_only_fields = EXCLUDE_FIELDS class TeamSerializer(CustomModelSerializer): leader_name = serializers.CharField(source='leader.name', read_only=True) belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True) class Meta: model = Team fields = '__all__' read_only_fields = EXCLUDE_FIELDS class MpointSerializer(CustomModelSerializer): mgroup_name = serializers.CharField(source='mgroup.name', read_only=True) belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True) ep_monitored_name = serializers.CharField(source='ep_monitored.name', read_only=True) ep_belong_name = serializers.CharField(source='ep_belong.name', read_only=True) class Meta: model = Mpoint fields = '__all__' read_only_fields = EXCLUDE_FIELDS class MpLogSerializer(CustomModelSerializer): mpoint_name = serializers.CharField(source='mpoint.name', read_only=True) class Meta: model = MpLog fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['mpoint_name'] 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 update_fields = ['start_time', 'end_time', 'note'] 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']