views.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # coding=utf-8
  2. from rest_framework import generics
  3. from rest_framework.exceptions import NotFound
  4. from utils import response_ok
  5. from utils.exceptions import CustomError
  6. from apps.product.models import Product
  7. from apps.product.filters import ProductFilter
  8. from apps.foundation.models import Option
  9. from apps.foundation.filters import OptionFilter
  10. from .serializers import ProductSerializer, ProductDetailSerializer, ProductTypeSerializer
  11. class ProductListView(generics.ListAPIView):
  12. queryset = Product.objects.filter(delete=False)
  13. serializer_class = ProductSerializer
  14. def filter_queryset(self, queryset):
  15. f = ProductFilter(self.request.GET, queryset=queryset)
  16. return f.qs
  17. def list(self, request, *args, **kwargs):
  18. try:
  19. data = super(ProductListView, self).list(request)
  20. except NotFound:
  21. return response_ok([])
  22. return data
  23. class ProductTypeListView(generics.ListAPIView):
  24. queryset = Option.objects.filter(enable=True, delete=False, type=Option.PRODUCT_CATEGORY)
  25. serializer_class = ProductTypeSerializer
  26. def filter_queryset(self, queryset):
  27. f = OptionFilter(self.request.GET, queryset=queryset)
  28. return f.qs
  29. def list(self, request, *args, **kwargs):
  30. try:
  31. data = super(ProductTypeListView, self).list(request)
  32. except NotFound:
  33. return response_ok([])
  34. return data
  35. class ProductDetailView(generics.RetrieveAPIView):
  36. queryset = Product.objects.filter(enabled=True, delete=False)
  37. serializer_class = ProductDetailSerializer
  38. def retrieve(self, request, *args, **kwargs):
  39. id = request.GET.get('id')
  40. instance = self.queryset.filter(id=id).first()
  41. if not instance:
  42. raise CustomError(u'未找到相应的商品!')
  43. serializer = self.get_serializer(instance)
  44. return response_ok(serializer.data)