views.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # coding=utf-8
  2. from django.db import transaction
  3. from django.db.models import F
  4. from django.conf import settings
  5. from rest_framework import generics, mixins
  6. from rest_framework.viewsets import GenericViewSet
  7. from rest_framework.views import APIView
  8. from rest_framework.decorators import action
  9. from rest_framework.exceptions import NotFound
  10. from utils import response_ok
  11. from utils.permission import IsCustomerUser
  12. from utils.exceptions import CustomError
  13. from apps.product.models import Product
  14. from apps.usedvehicle.filters import UsedVehicleFilter
  15. from apps.account import tenant_log
  16. from apps.foundation.models import BizLog, Option
  17. from apps.customer.models import Customer
  18. from apps.foundation.filters import OptionFilter
  19. from apps.usedvehicle.models import UsedVehicle
  20. from .serializers import UsedVehicleSerializer, UsedVehicleDetailSerializer, UsedVehicleOptionSerializer
  21. class UsedVehicleListView(generics.ListAPIView):
  22. queryset = UsedVehicle.objects.filter(delete=False,status=UsedVehicle.STOCK)
  23. serializer_class = UsedVehicleSerializer
  24. def filter_queryset(self, queryset):
  25. f = UsedVehicleFilter(self.request.GET, queryset=queryset)
  26. return f.qs
  27. def list(self, request, *args, **kwargs):
  28. try:
  29. data = super(UsedVehicleListView, self).list(request)
  30. except NotFound:
  31. return response_ok([])
  32. return data
  33. class OptionTypesView(APIView):
  34. def get(self, request):
  35. rows = Option.objects.filter(delete=False, enable=True).order_by('type')
  36. data = {
  37. 'gearboxs': rows.filter(type=Option.VEHICLE_GEARBOX).values('id', 'name'),
  38. 'colors': rows.filter(type=Option.VEHICLE_COLOR).values('id', 'name'),
  39. 'displacements': rows.filter(type=Option.VEHICLE_DISPLACEMENT).values('id', 'name'),
  40. 'emissions': rows.filter(type=Option.VEHICLE_EMISSION).values('id', 'name'),
  41. 'seat_counts': rows.filter(type=Option.VEHICLE_SEAT_COUNT).values('id', 'name'),
  42. 'oil_types': rows.filter(type=Option.VEHICLE_OIL).values('id', 'name'),
  43. }
  44. return response_ok(data)
  45. class UsedVehicleDetailView(generics.RetrieveAPIView):
  46. queryset = UsedVehicle.objects.filter(delete=False,status=UsedVehicle.STOCK)
  47. serializer_class = UsedVehicleDetailSerializer
  48. def retrieve(self, request, *args, **kwargs):
  49. id = request.GET.get('id')
  50. instance = self.queryset.filter(id=id).first()
  51. if not instance:
  52. raise CustomError(u'未找到相应的车辆!')
  53. serializer = self.get_serializer(instance)
  54. return response_ok(serializer.data)