import logging from decimal import Decimal from rest_framework import viewsets from suitablephones.models import Bluetooth, Camera, Device from suitablephones.serializers import (BluetoothSerializer, CameraSerializer, DeviceSerializer, DeviceSerializerShort) class SearchDeviceViewSet(viewsets.ModelViewSet): queryset = Device.objects.all() serializer_class = DeviceSerializer def get_queryset(self): query = self.request.query_params.get('q') if query: self.queryset = self.queryset.filter(codename__icontains=query) | self.queryset.filter(name__icontains=query) | self.queryset.filter(vendor__icontains=query) return self.queryset class SingleDeviceViewSet(viewsets.ModelViewSet): queryset = Device.objects.all() serializer_class = DeviceSerializer def get_queryset(self): codename = self.request.query_params.get('codename') if codename: self.queryset = self.queryset.filter(codename__icontains=codename) return self.queryset # ViewSets define the view behavior. class DeviceViewSet(viewsets.ModelViewSet): queryset = Device.objects.all() serializer_class = DeviceSerializerShort #http://url/api/devices?megapixel=3 def get_queryset(self): name = self.request.query_params.get('name') megapixel = self.request.query_params.get('megapixel') size_in = self.request.query_params.get('size_in') resolution = self.request.query_params.get('resolution') screen_type = self.request.query_params.get('screen_type') soc = self.request.query_params.get('soc') short_view = self.request.query_params.get('short_view') #maintainers = self.request.query_params.getlist('maintainers') version = self.request.query_params.get('version') if name: self.queryset = self.queryset.filter(name__icontains=name) if megapixel: self.queryset = self.queryset.filter(cameras__megapixel__gt=Decimal(megapixel)) if size_in: self.queryset = self.queryset.filter(screen__size_in__lt=Decimal(size_in)) if resolution: self.queryset = self.queryset.filter(screen__resolution__icontains=resolution) if screen_type: self.queryset = self.queryset.filter(screen__technology__icontains=screen_type) if soc: self.queryset = self.queryset.filter(soc__icontains=soc) if version: self.queryset = self.queryset.filter(versions__icontains=version) #if maintainers: if short_view: self.serializer_class = DeviceSerializerShort self.queryset = self.queryset.filter(maintainers__len__gt=0) return self.queryset def get_cameras(self): return self.request.GET.getlist("cameras") class BluetoothViewSet(viewsets.ModelViewSet): queryset = Bluetooth.objects.all() serializer_class = BluetoothSerializer class CameraViewSet(viewsets.ModelViewSet): queryset = Camera.objects.all() serializer_class = CameraSerializer