from apps.utils.serializers import CustomModelSerializer from apps.enm.models import Mpoint, Mgroup, MpLog, Team, SfLog, StLog 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') class Meta: model = Mgroup fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['belong_dept_name'] class TeamSerializer(CustomModelSerializer): leader_name = serializers.CharField(source='leader.name') belong_dept_name = serializers.CharField(source='belong_dept.name') class Meta: model = Team fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['belong_dept_name', 'leader_name'] class MpointSerializer(CustomModelSerializer): mgroup_name = serializers.CharField(source='mgroup.name') belong_dept_name = serializers.CharField(source='belong_dept.name') ep_monitored_name = serializers.CharField(source='ep_monitored.name') ep_belong_name = serializers.CharField(source='ep_belong.name') class Meta: model = Mpoint fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['mgroup_name', 'belong_dept_name'] class MpLogSerializer(CustomModelSerializer): mpoint_name = serializers.CharField(source='mpoint.name') class Meta: model = MpLog fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['mpoint_name'] class StLogSerializer(CustomModelSerializer): mgroup_name = serializers.CharField(source='mgroup.name') class Meta: model = StLog fields = '__all__' class SfLogSerializer(CustomModelSerializer): mgroup_name = serializers.CharField(source='mgroup.name') team_name = serializers.CharField(source='team.name') shift_name = serializers.CharField(source='shift.name') leader_name = serializers.CharField(source='leader.name') class Meta: model = SfLog fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['mgroup_name', 'team_name', 'shift_name', 'leader_name'] 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)