views.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import logging
  2. from decimal import Decimal
  3. from rest_framework import viewsets
  4. from suitablephones.models import Bluetooth, Camera, Device
  5. from suitablephones.serializers import (BluetoothSerializer, CameraSerializer,
  6. DeviceSerializer, DeviceSerializerShort)
  7. class SearchDeviceViewSet(viewsets.ModelViewSet):
  8. queryset = Device.objects.all()
  9. serializer_class = DeviceSerializer
  10. def get_queryset(self):
  11. query = self.request.query_params.get('q')
  12. if query:
  13. self.queryset = self.queryset.filter(codename__icontains=query) | self.queryset.filter(name__icontains=query) | self.queryset.filter(vendor__icontains=query)
  14. return self.queryset
  15. class SingleDeviceViewSet(viewsets.ModelViewSet):
  16. queryset = Device.objects.all()
  17. serializer_class = DeviceSerializer
  18. def get_queryset(self):
  19. codename = self.request.query_params.get('codename')
  20. if codename:
  21. self.queryset = self.queryset.filter(codename__icontains=codename)
  22. return self.queryset
  23. # ViewSets define the view behavior.
  24. class DeviceViewSet(viewsets.ModelViewSet):
  25. queryset = Device.objects.all()
  26. serializer_class = DeviceSerializerShort
  27. #http://url/api/devices?megapixel=3
  28. def get_queryset(self):
  29. name = self.request.query_params.get('name')
  30. megapixel = self.request.query_params.get('megapixel')
  31. size_in = self.request.query_params.get('size_in')
  32. resolution = self.request.query_params.get('resolution')
  33. screen_type = self.request.query_params.get('screen_type')
  34. #maintainers = self.request.query_params.getlist('maintainers')
  35. version = self.request.query_params.get('version')
  36. if name:
  37. self.queryset = self.queryset.filter(name__icontains=name)
  38. if megapixel:
  39. self.queryset = self.queryset.filter(cameras__megapixel__gt=Decimal(megapixel))
  40. if version:
  41. self.queryset = self.queryset.filter(versions__icontains=version)
  42. if size_in:
  43. self.queryset = self.queryset.filter(screen__size_in__lt=Decimal(size_in))
  44. if resolution:
  45. self.queryset = self.queryset.filter(screen__resolution__icontains=resolution)
  46. if screen_type:
  47. self.queryset = self.queryset.filter(screen__technology__icontains=screen_type)
  48. #if maintainers:
  49. self.queryset = self.queryset.filter(maintainers__len__gt=0)
  50. return self.queryset
  51. def get_cameras(self):
  52. return self.request.GET.getlist("cameras")
  53. class BluetoothViewSet(viewsets.ModelViewSet):
  54. queryset = Bluetooth.objects.all()
  55. serializer_class = BluetoothSerializer
  56. class CameraViewSet(viewsets.ModelViewSet):
  57. queryset = Camera.objects.all()
  58. serializer_class = CameraSerializer