views.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. from rest_framework import viewsets
  2. from utils.page import MyPageNumberPagination
  3. from utils.datasolve import sumOfList, transportation_calculate
  4. from utils.md5 import Md5
  5. from rest_framework.filters import OrderingFilter
  6. from django_filters.rest_framework import DjangoFilterBackend
  7. from rest_framework.response import Response
  8. from rest_framework.exceptions import APIException
  9. from django.utils import timezone
  10. from django.db import transaction
  11. import logging
  12. from rest_framework import status
  13. from .models import DeviceModel,LocationModel,LocationContainerLink,LocationChangeLog
  14. from bound.models import BoundBatchModel,BoundDetailModel,BoundListModel
  15. from .filter import DeviceFilter,LocationFilter,LocationContainerLinkFilter,LocationChangeLogFilter
  16. from .serializers import LocationListSerializer,LocationPostSerializer
  17. # 以后添加模块时,只需要在这里添加即可
  18. from rest_framework.permissions import AllowAny
  19. logger = logging.getLogger(__name__)
  20. class locationViewSet(viewsets.ModelViewSet):
  21. """
  22. retrieve:
  23. Response a data list(get)
  24. list:
  25. Response a data list(all)
  26. create:
  27. Create a data line(post)
  28. delete:
  29. Delete a data line(delete)
  30. """
  31. # authentication_classes = [] # 禁用所有认证类
  32. # permission_classes = [AllowAny] # 允许任意访问
  33. pagination_class = MyPageNumberPagination
  34. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  35. ordering_fields = ['id', "create_time", "update_time", ]
  36. filter_class = LocationFilter
  37. def get_project(self):
  38. try:
  39. id = self.kwargs.get('pk')
  40. return id
  41. except:
  42. return None
  43. def get_queryset(self):
  44. id = self.get_project()
  45. if self.request.user:
  46. if id is None:
  47. return LocationModel.objects.filter()
  48. else:
  49. return LocationModel.objects.filter( id=id)
  50. else:
  51. return LocationModel.objects.none()
  52. def get_serializer_class(self):
  53. if self.action == 'list':
  54. return LocationListSerializer
  55. elif self.action == 'update':
  56. return LocationPostSerializer
  57. elif self.action =='retrieve':
  58. return LocationListSerializer
  59. def update(self, request, *args, **kwargs):
  60. data = self.request.data
  61. order_month = str(timezone.now().strftime('%Y%m'))
  62. data['month'] = order_month
  63. location_code = data.get('location_code')
  64. # 处理库位对象
  65. location_obj = LocationModel.objects.filter(location_code=location_code).first()
  66. if location_obj:
  67. data['id'] = location_obj.id
  68. logger.info(f"库位 {location_code} 已存在")
  69. else:
  70. logger.info(f"库位 {location_code} 不存在,创建库位对象")
  71. serializer_list = LocationPostSerializer(data=data)
  72. serializer_list.is_valid(raise_exception=True)
  73. serializer_list.save()
  74. data['id'] = serializer_list.data.get('id')
  75. return Response(data, status=status.HTTP_201_CREATED)