예제 #1
0
    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)
예제 #2
0
파일: views.py 프로젝트: sibis/acme-inc
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)
예제 #3
0
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)
예제 #4
0
    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()