views.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # coding=utf-8
  2. from django.db import transaction
  3. from rest_framework.decorators import action
  4. from utils import response_ok, response_error
  5. from utils.exceptions import CustomError
  6. from utils.permission import IsCustomer
  7. from utils.custom_modelviewset import CustomModelViewSet
  8. from apps.order.models import ShoppingCart
  9. from apps.order.filters import ShoppingCartFilter
  10. from apps.customer.order.serializers import ShoppingCartSerializer
  11. from apps.log.models import BizLog
  12. class ShoppingCartViewSet(CustomModelViewSet):
  13. permission_classes = [IsCustomer, ]
  14. queryset = ShoppingCart.objects.filter()
  15. serializer_class = ShoppingCartSerializer
  16. def filter_queryset(self, queryset):
  17. queryset = queryset.filter(customer=self.request.customer)
  18. f = ShoppingCartFilter(self.request.GET, queryset=queryset)
  19. return f.qs
  20. def perform_create(self, serializer):
  21. super(ShoppingCartViewSet, self).perform_create(serializer)
  22. @action(methods=['post'], detail=True)
  23. def update_quantity(self, request, pk):
  24. quantity = request.POST.get('quantity')
  25. try:
  26. quantity = int(quantity)
  27. except:
  28. raise CustomError(u'商品数量错误,请修改!')
  29. if quantity <= 0:
  30. raise CustomError(u'请输入正确的商品数量!')
  31. with transaction.atomic():
  32. instance = ShoppingCart.objects.filter(id=pk, customer=request.customer).first()
  33. if instance:
  34. instance.quantity = quantity
  35. instance.save()
  36. return response_ok()
  37. @action(methods=['post'], detail=False)
  38. def del_cart(self, request):
  39. car_ids = request.POST.get('ids').split(',')
  40. with transaction.atomic():
  41. ShoppingCart.objects.filter(id__in=car_ids, customer=request.customer).delete()
  42. return response_ok()