def post(self, request, format=None): items = Item.objects.order_by('-created_at') category_id = request.data.get('category_id', None) brand_id = request.data.get('brand_id', None) name = request.data.get('name', None) if category_id is not None: category = Category.objects.get(id=category_id) all_cats = category.get_all_children() category_ids = Category.objects.filter(all_cats).values_list("id", flat=True) items = items.filter(category__id__in=category_ids) if brand_id is not None: items = items.filter(brand_id=brand_id) if name is not None: items = items.filter(name__contains=name) paginator = PageNumberPagination() page_number = request.data.get('page_number', 1) page_size = request.data.get('page_size', 10) paginator = Paginator(items , page_size) serializer = ItemSerializer(paginator.page(page_number) , many=True, context={'request':request}) # ----------------------------------------------------------- # response = Response(serializer.data, status=status.HTTP_200_OK) data = {} data["items"] = serializer.data data["total_items"] = Item.objects.count() return JsonResponse(data, safe=False)
def list_products(request): """ The products lists with info and date time """ try: paginator = PageNumberPagination() paginator.page = request.GET.get('page') or 1 paginator.page_size = 10 product_status = request.GET.get('status') or [1, 2] product_status = json.loads(product_status) search_term = request.GET.get('search') or "" products_objects = ProductInfo.objects.filter( (Q(status__in=product_status)) & (Q(name__icontains=search_term) | Q(sku__icontains=search_term) | Q(description__icontains=search_term))) result_page = paginator.paginate_queryset(products_objects, request) products = FetchProductsSerializer(result_page, many=True) return Response( { 'msg': 'Products information retrived successfully!', 'data': products.data }, status=status.HTTP_200_OK) except Exception as e: return Response({'msg': str(e)}, status=status.HTTP_400_BAD_REQUEST)
def posting_list_4(request): if request.method == 'GET': paginator = PageNumberPagination() paginator.page = 4 posting = Posting.objects.all() result_page = paginator.paginate_queryset(posting, request) posting_serializer = PostingSerializer(result_page, many=True) return paginator.get_paginated_response(posting_serializer.data) elif request.method == "POST": posting_data = JSONParser().parse(request.data) posting_serializer = PostingSerializer(data=posting_data, files=request.FILES) if posting_serializer.is_valid(): posting_serializer.save() return JsonResponse(posting_serializer.data, status=status.HTTP_201_CREATED) return JsonResponse(posting_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def parseRequestToFilter(self, request, dbModel, serModel): if(request.body is not None): try: queryset = dbModel.objects.all() page = PageNumberPagination() try: if request.body != '': req_params = json.loads('%s' % request.body.decode().replace('\n','')) else: req_params = None except Exception as e: req_params = None print('step0: %s' % e) # 分页 try: self.pageno = int(request.GET.get('page', 1)) if req_params is not None and req_params['pager'] is not None: # if req_params['pager']['page'] is not None: # page.page = req_params['pager']['page'] # self.pageno = int(req_params['pager']['page']) # else: # page.page = self.pageno if req_params['pager']['size'] is not None: page.page_size = req_params['pager']['size'] self.pagesize = int(req_params['pager']['size']) else: page.page_size = self.pagesize except Exception as e: page.page = self.pageno page.page_size = self.pagesize print('step1: %s' %e) # 字段筛选 try: if req_params is not None and req_params['filter'] != '': condtions = self.parseCondtions(req_params['filter']) queryset = queryset.filter(condtions) except Exception as e: print('step2: %s' %e) # 排序 try: if req_params is not None and req_params['order'] is not None: queryset = queryset.order_by(*req_params['order']) except Exception as e: print('step3: %s' %e) pass # 计算总页数 self.rows = queryset.count() if self.rows > 0: self.pagetotal = math.ceil(self.rows / self.pagesize) # 查询 page_roles = page.paginate_queryset(queryset=queryset, request=request, view=self) ser = serModel(instance=page_roles, many=True) return self.successful(data=ser.data) except Exception as e: print('step4: %s' %e) return self.unsuccessful(msg= str(e)) else: return self.unsuccessful()