From d1d9a0610d498fdef1e7fc1635cdd379c456be29 Mon Sep 17 00:00:00 2001 From: xianfx Date: Wed, 15 Feb 2023 18:07:33 +0800 Subject: [PATCH] =?UTF-8?q?#=20=E4=BF=AE=E5=A4=8D=20device=20=E5=85=B3?= =?UTF-8?q?=E8=81=94=E5=AD=97=E6=AE=B5=20null?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/mosquito/api/serializers.py | 28 ++++++++++++++++++++++------ apps/mosquito/api/views.py | 2 +- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/apps/mosquito/api/serializers.py b/apps/mosquito/api/serializers.py index 8965314..5c6a58c 100644 --- a/apps/mosquito/api/serializers.py +++ b/apps/mosquito/api/serializers.py @@ -115,6 +115,7 @@ def get_device(device_id: str, source: str) -> Optional[dict]: class WeatherLogSerializer(serializers.ModelSerializer): power = serializers.SerializerMethodField() + device_name = serializers.SerializerMethodField() data_time = serializers.SerializerMethodField() create_time = serializers.SerializerMethodField() @@ -143,11 +144,29 @@ class WeatherLogSerializer(serializers.ModelSerializer): 'create_time', ] + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.device = None + def get_power(self, obj): # power max 12.6V, min 8.5V power = int((float(obj.power) - 8.5) / 4.1 * 100) return str(power) + def get_device_name(self, obj): + weather_device_id = obj.device_id + device = cache.get(weather_device_id) + if device: + self.device = device + return device.device_name + qs = DeviceInfo.objects.filter(weather_device_id=weather_device_id) + if qs.count() > 0: + device = qs[0] + self.device = device + cache.set(weather_device_id, device, 60 * 60 * 24) + return device.device_name + return None + def get_data_time(self, obj): return obj.data_time.strftime('%Y-%m-%d %H:%M:%S') @@ -192,13 +211,12 @@ class WeatherLogWithInfoSerializer(WeatherLogSerializer): 'point_y', ] - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.device = None + # def __init__(self, *args, **kwargs): + # super().__init__(*args, **kwargs) + # self.device = None def get_longitude(self, obj): device = self.device - print(device) if device: if device.longitude: return device.longitude @@ -206,7 +224,6 @@ class WeatherLogWithInfoSerializer(WeatherLogSerializer): def get_latitude(self, obj): device = self.device - print(device) if device: if device.latitude: return device.latitude @@ -214,7 +231,6 @@ class WeatherLogWithInfoSerializer(WeatherLogSerializer): def get_location_id(self, obj): device = self.device - print(device) if device: if device.location_id: return device.location_id diff --git a/apps/mosquito/api/views.py b/apps/mosquito/api/views.py index cabab51..1f6b741 100644 --- a/apps/mosquito/api/views.py +++ b/apps/mosquito/api/views.py @@ -116,7 +116,7 @@ class DeviceTempLogListAPIView(ListAPIView, RoleMixin, DeviceListMixin): class WeatherLogListAPIView(ListAPIView, RoleMixin, WeatherStationListMixin): - #serializer_class = WeatherLogSerializer + # serializer_class = WeatherLogSerializer permission_classes = [IsAuthenticated] filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter) pagination_class = WeatherlogHistoryPagination