from typing import Optional from rest_framework import serializers from counter.models import DeviceCount, DeviceInfo from mosquito.models import DeviceInfo as MosquitoDeviceInfo class DeviceInfoMobileSerializer(serializers.ModelSerializer): device_name = serializers.SerializerMethodField() status = serializers.SerializerMethodField() coordinate = serializers.SerializerMethodField() # location = serializers.SerializerMethodField() class Meta: model = DeviceInfo fields = [ 'device_id', 'device_name', 'status', 'coordinate', # 'location', ] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.latest = None self.cur_device = None def get_device_name(self, obj) -> Optional[str]: qs = MosquitoDeviceInfo.objects.filter(device_id=obj.device_id) if qs.count() > 0: device = qs.first() self.cur_device = device return device.device_name return None def get_status(self, obj) -> int: return obj.online def get_coordinate(self, obj): if self.cur_device: lon, lat = [self.cur_device.longitude, self.cur_device.latitude] if lon and lat: return [lon, lat] return None def get_location(self, obj): return obj.location