views.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 SingleDeviceViewSet(viewsets.ModelViewSet):
  8. queryset = Device.objects.all()
  9. serializer_class = DeviceSerializer
  10. def get_queryset(self):
  11. params = self.request.query_params.get('search')
  12. if params:
  13. self.queryset = self.queryset.filter(codename__icontains=params) | self.queryset.filter(name__icontains=params) | self.queryset.filter(vendor__icontains=params)
  14. return self.queryset
  15. # ViewSets define the view behavior.
  16. class DeviceViewSet(viewsets.ModelViewSet):
  17. queryset = Device.objects.all()
  18. serializer_class = DeviceSerializerShort
  19. #http://url/api/devices?megapixel=3
  20. def get_queryset(self):
  21. name = self.request.query_params.get('name')
  22. megapixel = self.request.query_params.get('megapixel')
  23. size_in = self.request.query_params.get('size_in')
  24. resolution = self.request.query_params.get('resolution')
  25. screen_type = self.request.query_params.get('screen_type')
  26. #maintainers = self.request.query_params.getlist('maintainers')
  27. version = self.request.query_params.get('version')
  28. if name:
  29. self.queryset = self.queryset.filter(name__icontains=name)
  30. if megapixel:
  31. self.queryset = self.queryset.filter(cameras__megapixel__gt=Decimal(megapixel))
  32. if version:
  33. self.queryset = self.queryset.filter(versions__icontains=version)
  34. if size_in:
  35. self.queryset = self.queryset.filter(screen__size_in__lt=Decimal(size_in))
  36. if resolution:
  37. self.queryset = self.queryset.filter(screen__resolution__icontains=resolution)
  38. if screen_type:
  39. self.queryset = self.queryset.filter(screen__technology__icontains=screen_type)
  40. #if maintainers:
  41. self.queryset = self.queryset.filter(maintainers__len__gt=0)
  42. return self.queryset
  43. def get_cameras(self):
  44. return self.request.GET.getlist("cameras")
  45. class BluetoothViewSet(viewsets.ModelViewSet):
  46. queryset = Bluetooth.objects.all()
  47. serializer_class = BluetoothSerializer
  48. class CameraViewSet(viewsets.ModelViewSet):
  49. queryset = Camera.objects.all()
  50. serializer_class = CameraSerializer