views.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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.customer.models import CustomerAddress
  9. from apps.customer.filters import CustomerAddressFilter
  10. from apps.customer.address.serializers import AddressSerializer
  11. from apps.log.models import BizLog
  12. class CustomerAddressViewSet(CustomModelViewSet):
  13. permission_classes = [IsCustomer, ]
  14. queryset = CustomerAddress.objects.filter(delete=False)
  15. serializer_class = AddressSerializer
  16. def filter_queryset(self, queryset):
  17. queryset = queryset.filter(customer=self.request.customer)
  18. f = CustomerAddressFilter(self.request.GET, queryset=queryset)
  19. return f.qs
  20. def list(self, request, *args, **kwargs):
  21. queryset = self.filter_queryset(self.get_queryset())
  22. serializer = self.get_serializer(queryset, many=True)
  23. return response_ok(serializer.data)
  24. def perform_create(self, serializer):
  25. super(CustomerAddressViewSet, self).perform_create(serializer)
  26. instance = serializer.instance
  27. validated_data = serializer.validated_data
  28. BizLog.objects.addnew(instance.customer.user, BizLog.INSERT, u'客户添加收货地址,id=%d' % instance.id, validated_data)
  29. def perform_update(self, serializer):
  30. super(CustomerAddressViewSet, self).perform_update(serializer)
  31. instance = serializer.instance
  32. validated_data = serializer.validated_data
  33. BizLog.objects.addnew(instance.customer.user, BizLog.UPDATE, u'客户修改收货地址,id=%d' % instance.id, validated_data)
  34. def perform_destroy(self, instance):
  35. queryset = self.get_queryset().filter(customer=self.request.customer).exclude(id=instance.id)
  36. instance.destory(queryset)
  37. BizLog.objects.addnew(instance.customer.user, BizLog.DELETE, u'客户删除收货地址,id=%d' % instance.id)
  38. @action(methods=['get'], detail=True)
  39. def set_default(self, request, *args, **kwargs):
  40. with transaction.atomic():
  41. instance = self.get_object()
  42. self.get_queryset().filter(customer=self.request.customer, default=True).update(default=False)
  43. instance.default = True
  44. instance.save()
  45. BizLog.objects.addnew(instance.customer.user, BizLog.UPDATE, u'客户设置默认收货地址,id=%d' % instance.id)
  46. return response_ok()