views.py 3.6 KB

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