Ejemplo n.º 1
0
    def search_by_name(self, request, *args, **kwargs):
        # type : (HttpRequest, *Any, **Any) -> HttpResponse
        """按照名称搜索
        """
        name = request.GET.get('name') or ''
        product_type = request.GET.get('product_type') or 0

        product_type = int(product_type)

        queryset = ModelProduct.objects.filter(
            shelf_status=ModelProduct.ON_SHELF,
            name__contains=name,
            product_type=product_type)
        ids = [i['id'] for i in queryset.values('id')]
        queryset = ModelProductCtl.multiple(ids=ids)

        # 创建搜索记录
        if not request.user.is_authenticated:  # 匿名用户
            user_id = 0
        else:
            user_id = request.user.id
        if name.strip():
            create_user_search_history(content=name.strip(),
                                       target=UserSearchHistory.MODEL_PRODUCT,
                                       user_id=user_id,
                                       result_count=len(queryset))

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = serializers_v2.APIModelProductListSerializer(
                page, many=True)
            return self.get_paginated_response(serializer.data)
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)
Ejemplo n.º 2
0
 def get_headimg(self, request, *args, **kwargs):
     """ 查询头图接口 """
     modelId = request.GET.get('modelId', '')
     if not modelId.isdigit():
         raise Http404
     from apis.v1.products import ModelProductCtl
     obj = ModelProductCtl.retrieve(modelId)
     data = serializers_v2.APIModelProductListSerializer(obj).data
     return Response([data])
Ejemplo n.º 3
0
 def boutique(self, request, *args, **kwargs):
     # type : (HttpRequest, *Any, **Any) -> HttpResponse
     """精品汇商品
     """
     order_by = request.GET.get('order_by')
     queryset = ModelProduct.objects.get_boutique_goods().filter(
         shelf_status=ModelProduct.ON_SHELF)
     if order_by == u'price':
         queryset = queryset.order_by('lowest_agent_price')
     ids = [i['id'] for i in queryset.values('id')]
     queryset = ModelProductCtl.multiple(ids=ids)
     page = self.paginate_queryset(queryset)
     if page is not None:
         serializer = serializers_v2.APIModelProductListSerializer(
             page, many=True)
         return self.get_paginated_response(serializer.data)
     serializer = self.get_serializer(queryset, many=True)
     return Response(serializer.data)
Ejemplo n.º 4
0
    def list(self, request, *args, **kwargs):
        cid_str = request.GET.get('cid', '')
        order_by = request.GET.get('order_by')
        queryset = self.filter_queryset(self.get_queryset())
        queryset = self.order_queryset(queryset, order_by=order_by)
        onshelf_qs = queryset.filter(shelf_status=ModelProduct.ON_SHELF,
                                     product_type=ModelProduct.USUAL_TYPE)
        q_filter = Q()
        cids = [(c.find('-') > 0 and c or '%s-' % c)
                for c in cid_str.split(',') if c]
        for cid in cids:
            q_filter = q_filter | Q(salecategory__cid__startswith=cid)

        onshelf_qs = onshelf_qs.filter(q_filter)
        page_ids = self.paginate_pks(onshelf_qs)
        modelproducts = ModelProductCtl.multiple(ids=page_ids)
        serializer = serializers_v2.APIModelProductListSerializer(
            modelproducts, many=True)
        return self.get_paginated_response(serializer.data)
Ejemplo n.º 5
0
    def get_pagination_response_by_date(self,
                                        request,
                                        cur_date,
                                        only_onshelf=False):
        queryset = self.filter_queryset(self.get_queryset())
        queryset = self.get_normal_qs(queryset)

        queryset = self.order_queryset(queryset, order_by='portal')
        date_range = (datetime.datetime.combine(cur_date, datetime.time.min),
                      datetime.datetime.combine(cur_date, datetime.time.max))
        if only_onshelf:
            queryset = queryset.filter(Q(onshelf_time__range=date_range),
                                       shelf_status=ModelProduct.ON_SHELF)
        else:
            queryset = queryset.filter(onshelf_time__range=date_range)
        # queryset = self.order_queryset(request, tal_queryset, order_by=self.INDEX_ORDER_BY)
        queryset = queryset.filter(product_type=ModelProduct.USUAL_TYPE)

        page_ids = self.paginate_pks(queryset)
        modelproducts = ModelProductCtl.multiple(ids=page_ids)
        object_list = serializers_v2.APIModelProductListSerializer(
            modelproducts, many=True).data
        response = self.get_paginated_response(object_list)
        onshelf_time = object_list and max(
            [obj['offshelf_time']
             for obj in object_list]) or datetime.datetime.now()
        offshelf_time = object_list and min(
            [obj['onshelf_time'] for obj in object_list])
        if not offshelf_time:
            offshelf_time = onshelf_time + datetime.timedelta(seconds=60 * 60 *
                                                              28)
        response.data.update({
            'offshelf_deadline':
            onshelf_time.strftime("%Y-%m-%dT%H:%M:%S"),
            'onshelf_starttime':
            offshelf_time.strftime("%Y-%m-%dT%H:%M:%S")
        })
        return response