from apps.utils.serializers import CustomModelSerializer from apps.utils.constants import EXCLUDE_FIELDS_BASE, EXCLUDE_FIELDS_DEPT from .models import Drain, DrainEquip, EnvData, VehicleAccess, CarWash from apps.em.serializers import EquipmentSerializer from rest_framework import serializers from django.utils import timezone class DrainSerializer(CustomModelSerializer): """Serializer for Drain model""" mgroup_name = serializers.CharField(source='mgroup.name', read_only=True) class Meta: model = Drain fields = "__all__" read_only_fields = EXCLUDE_FIELDS_DEPT def validate(self, attrs): attrs['belong_dept'] = attrs['mgroup'].belong_dept return super().validate(attrs) class DrainEquipSerializer(CustomModelSerializer): equipment_type = serializers.CharField( source='equipment.type', read_only=True) equipment_name = serializers.CharField( source='equipment.name', read_only=True) class Meta: model = DrainEquip fields = "__all__" read_only_fields = EXCLUDE_FIELDS_BASE class EnvDataSerializer(CustomModelSerializer): """Serializer for EnvData model""" class Meta: model = EnvData fields = "__all__" class DrainEquipEnvSerializer(CustomModelSerializer): equipment_number = serializers.CharField( source='equipment.number', read_only=True) equipment_type = serializers.CharField( source='equipment.type', read_only=True) equipment_name = serializers.CharField( source='equipment.name', read_only=True) equipment_envdata = serializers.SerializerMethodField() equipment_ = EquipmentSerializer(source='equipment', read_only=True) drain_ = DrainSerializer(source='drain', read_only=True) def get_equipment_envdata(self, obj): now = timezone.now() now_10_before = now - timezone.timedelta(minutes=10) obj = EnvData.objects.filter( equipment=obj.equipment, time__gte=now_10_before, time__lte=now).order_by('-time').first() if obj: return EnvDataSerializer(instance=obj).data else: return {} class Meta: model = DrainEquip fields = ['id', 'equipment', 'equipment_type', 'equipment_name', 'equipment_envdata', 'equipment_number', 'equipment_', 'drain_'] class VehicleAccessSerializer(CustomModelSerializer): """Serializer for VehicleAccess model""" class Meta: model = VehicleAccess fields = "__all__" read_only_fields = EXCLUDE_FIELDS_BASE class EnvDataExportSerializer(serializers.Serializer): time = serializers.DateTimeField(label='时间') type = serializers.ChoiceField( label='导出类型', choices=['hour', 'day', 'week', 'month', 'season', 'year']) class CarWashSerializer(CustomModelSerializer): class Meta: model = CarWash fields = "__all__"