views.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. soc = self.request.query_params.get('soc')
  35. short_view = self.request.query_params.get('short_view')
  36. #maintainers = self.request.query_params.getlist('maintainers')
  37. version = self.request.query_params.get('version')
  38. if name:
  39. self.queryset = self.queryset.filter(name__icontains=name)
  40. if megapixel:
  41. self.queryset = self.queryset.filter(cameras__megapixel__gt=Decimal(megapixel))
  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 soc:
  49. self.queryset = self.queryset.filter(soc__icontains=soc)
  50. if version:
  51. self.queryset = self.queryset.filter(versions__icontains=version)
  52. #if maintainers:
  53. if short_view:
  54. self.serializer_class = DeviceSerializerShort
  55. self.queryset = self.queryset.filter(maintainers__len__gt=0)
  56. return self.queryset
  57. def get_cameras(self):
  58. return self.request.GET.getlist("cameras")
  59. class BluetoothViewSet(viewsets.ModelViewSet):
  60. queryset = Bluetooth.objects.all()
  61. serializer_class = BluetoothSerializer
  62. class CameraViewSet(viewsets.ModelViewSet):
  63. queryset = Camera.objects.all()
  64. serializer_class = CameraSerializer