views.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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.product.filters import ProductFilter
  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 .serializers import ProductSerializer, ProductDetailSerializer, ProductTypeSerializer
  20. class ProductListView(generics.ListAPIView):
  21. queryset = Product.objects.filter(delete=False)
  22. serializer_class = ProductSerializer
  23. def filter_queryset(self, queryset):
  24. f = ProductFilter(self.request.GET, queryset=queryset)
  25. return f.qs
  26. def list(self, request, *args, **kwargs):
  27. try:
  28. data = super(ProductListView, self).list(request)
  29. except NotFound:
  30. return response_ok([])
  31. return data
  32. class ProductTypeListView(generics.ListAPIView):
  33. queryset = Option.objects.filter(enable=True, delete=False, type=Option.PRODUCT_CATEGORY)
  34. serializer_class = ProductTypeSerializer
  35. def filter_queryset(self, queryset):
  36. f = OptionFilter(self.request.GET, queryset=queryset)
  37. return f.qs
  38. def list(self, request, *args, **kwargs):
  39. try:
  40. data = super(ProductTypeListView, self).list(request)
  41. except NotFound:
  42. return response_ok([])
  43. return data
  44. class ProductDetailView(generics.RetrieveAPIView):
  45. queryset = Product.objects.filter(enabled=True, delete=False)
  46. serializer_class = ProductDetailSerializer
  47. def retrieve(self, request, *args, **kwargs):
  48. id = request.GET.get('id')
  49. instance = self.queryset.filter(id=id).first()
  50. if not instance:
  51. raise CustomError(u'未找到相应的商品!')
  52. serializer = self.get_serializer(instance)
  53. return response_ok(serializer.data)