from rest_framework import viewsets from utils.page import MyPageNumberPagination from utils.md5 import Md5 from rest_framework.filters import OrderingFilter from django_filters.rest_framework import DjangoFilterBackend from rest_framework.response import Response from rest_framework.exceptions import APIException from django.http import StreamingHttpResponse from rest_framework.settings import api_settings from django.db import transaction from rest_framework import status from reportcenter.models import flowModel as flowlist from . import serializers from .filter import FlowFilter from .files import FileFlowListRenderCN class FlowsStatsViewSet(viewsets.ModelViewSet): filter_backends = [DjangoFilterBackend, OrderingFilter, ] ordering_fields = ['id', "create_time", "update_time", ] filter_class = FlowFilter pagination_class = MyPageNumberPagination """ list: Response a data list(all) post: Create a new data(create) """ def get_project(self): try: id = self.kwargs.get('pk') return id except: return None def get_queryset(self): id = self.get_project() if self.request.user: if id is None: return flowlist.objects.filter() else: return flowlist.objects.filter(id=id) else: return flowlist.objects.none() def get_serializer_class(self): if self.action in ['list', 'create', ]: return serializers.flowSerializer # elif self.action in ['retrieve','update',]: # return serializers.stocklistpartialSerializer else: return self.http_method_not_allowed(request=self.request) # def create(self, request, *args, **kwargs): # data = request.data.copy() # warehouse_code = data.get('warehouse_code') # warehouse_name = data.get('warehouse_name') # shelf_type = data.get('shelf_type') # shelf_name = data.get('shelf_name') # rows = int(data.get('rows', 0)) # cols = int(data.get('cols', 0)) # layers = int(data.get('layers', 0)) # existing_positions = flowlist.get_existing_positions(warehouse_code,shelf_name, rows, cols, layers) # # 生成所有可能的坐标 # instances = [] # for r in range(1, rows+1): # for c in range(1, cols+1): # for l in range(1, layers+1): # if (r, c, l) not in existing_positions : # instances.append(flowlist( # warehouse_code=warehouse_code, # warehouse_name=warehouse_name, # shelf_type=shelf_type, # shelf_name=shelf_name, # row=r, # col=c, # layer=l, # )) # try: # with transaction.atomic(): # flowlist.objects.bulk_create(instances, batch_size=1000) # except Exception as e: # return Response( # {"error": str(e)}, # status=status.HTTP_500_INTERNAL_SERVER_ERROR # ) # return Response({ # "created": len(instances), # "skipped": (rows*cols*layers) - len(instances) # }, status=status.HTTP_201_CREATED) # def update(self, request, pk): # qs = self.get_object() # print(qs.id) # # return Response({"detail": "暂不支持修改"}, status=status.HTTP_400_BAD_REQUEST) # data = self.request.data # print(data) # serializer = self.get_serializer(qs, data=data) # serializer.is_valid(raise_exception=True) # serializer.save() # headers = self.get_success_headers(serializer.data) # return Response(serializer.data, status=200, headers=headers) # def retrieve(self, request, pk): # qs = self.get_object() # serializer = self.get_serializer(qs) # return Response(serializer.data)