from rest_framework import status, decorators from rest_framework.filters import ( SearchFilter, OrderingFilter ) from rest_framework.generics import mixins from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from counter.views import BaseDeviceViewSet from .serializers import DeviceInfoMobileSerializer, LedStatusMobileSerializer from utils.pagination import DeviceInfoMobilePagination class DeviceInfoMobileViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, BaseDeviceViewSet): serializer_class = DeviceInfoMobileSerializer permission_classes = [IsAuthenticated] filter_backends = [SearchFilter, OrderingFilter] pagination_class = DeviceInfoMobilePagination search_fields = ['device_id', 'online'] def list(self, request, *args, **kwargs): response = super().list(request, *args, **kwargs) # serializer = self.get_serializer(self.get_queryset(), many=True) response_data = { 'count': response.data.get('count'), 'next': response.data.get('next'), 'previous': response.data.get('previous'), 'data': response.data.get('results'), 'code': 0, 'message': '获取成功' } return Response(response_data, status=status.HTTP_200_OK) def retrieve(self, request, *args, **kwargs): instance = self.get_object() serializer = self.get_serializer(instance) return Response({"code": 0, "data": serializer.data, "message": "success"}) @decorators.action(methods='GET', detail=True, url_path='led-status', serializer_class=LedStatusMobileSerializer) def get_led_status(self, request, device_id=None): instance = self.get_object() serializer = LedStatusMobileSerializer(instance) return Response({"code": 0, "data": serializer.data, "message": "success"}) def get_object(self): queryset = self.get_queryset() filter_kwargs = {'device_id': self.kwargs['device_id']} obj = queryset.filter(**filter_kwargs).first() self.check_object_permissions(self.request, obj) return obj