12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- 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 = DeviceSerializer
- #http://url/api/devices?megapixel=3
- def get_queryset(self):
- name = self.request.query_params.get('name')
- megapixel = self.request.query_params.get('megapixel')
- release = self.request.query_params.get('release')
- resolution = self.request.query_params.get('resolution')
- screen_type = self.request.query_params.get('screen_type')
- size_in = self.request.query_params.get('size_in')
- soc = self.request.query_params.get('soc')
- storage = self.request.query_params.get('storage')
- vendor = self.request.query_params.get('vendor')
- version = self.request.query_params.get('version')
- #maintainers = self.request.query_params.getlist('maintainers')
- short_view = self.request.query_params.get('short_view')
- 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 release:
- self.queryset = self.queryset.filter(release__icontains=release)
- 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 storage:
- self.queryset = self.queryset.filter(storage__icontains=storage)
- if vendor:
- self.queryset = self.queryset.filter(vendor__icontains=vendor)
- if version:
- self.queryset = self.queryset.filter(versions__icontains=version)
-
- #Add year filter
- #year = self.request.query_params.get('year')
- #if year:
- # self.queryset = self.queryset.filter(year__icontains=year)
- 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
|