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)
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])
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)
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)
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