views.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 = DeviceSerializer
  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. soc = self.request.query_params.get('soc')
  35. storage = self.request.query_params.get('storage')
  36. version = self.request.query_params.get('version')
  37. #maintainers = self.request.query_params.getlist('maintainers')
  38. short_view = self.request.query_params.get('short_view')
  39. if name:
  40. self.queryset = self.queryset.filter(name__icontains=name)
  41. if megapixel:
  42. self.queryset = self.queryset.filter(cameras__megapixel__gt=Decimal(megapixel))
  43. if size_in:
  44. self.queryset = self.queryset.filter(screen__size_in__lt=Decimal(size_in))
  45. if resolution:
  46. self.queryset = self.queryset.filter(screen__resolution__icontains=resolution)
  47. if screen_type:
  48. self.queryset = self.queryset.filter(screen__technology__icontains=screen_type)
  49. if soc:
  50. self.queryset = self.queryset.filter(soc__icontains=soc)
  51. if storage:
  52. self.queryset = self.queryset.filter(storage__icontains=storage)
  53. if version:
  54. self.queryset = self.queryset.filter(versions__icontains=version)
  55. #Add year filter
  56. #year = self.request.query_params.get('year')
  57. #if year:
  58. # self.queryset = self.queryset.filter(year__icontains=year)
  59. if short_view:
  60. self.serializer_class = DeviceSerializerShort
  61. self.queryset = self.queryset.filter(maintainers__len__gt=0)
  62. return self.queryset
  63. def get_cameras(self):
  64. return self.request.GET.getlist("cameras")
  65. class BluetoothViewSet(viewsets.ModelViewSet):
  66. queryset = Bluetooth.objects.all()
  67. serializer_class = BluetoothSerializer
  68. class CameraViewSet(viewsets.ModelViewSet):
  69. queryset = Camera.objects.all()
  70. serializer_class = CameraSerializer