def compras(self, request, *args, **kwargs): n = int(request.query_params.get('quantidade', 20)) top_categorias = self.get_queryset().annotate( n_vendas=Count('produtos__itens_vendas')).values( 'nome', 'slug', 'qtd_acessos', 'n_vendas').order_by('-n_vendas') return list_response(self, self.get_serializer, top_categorias[:n], request)
def vendas(self, request, pk): """ Obter vendas relacionadas a um determinado cliente. """ try: cliente = self.get_object() return list_response(self, VendaSerializer, cliente.vendas.all(), request) except models.ObjectDoesNotExist: raise Http404
def list(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_queryset()) slugs = request.query_params.get('tags', None) if slugs: slugs = slugs.split(',') categorias = Categoria.objects.filter(slug__in=slugs) categorias.update(qtd_acessos=F('qtd_acessos') + 1) queryset = queryset.filter(categorias__in=categorias).distinct() return list_response(self, ProdutoListSerializer, queryset, request)
def produtos(self, request, pk, *args, **kwargs): search = request.query_params.get('search', None) categoria = self.get_object() categoria.qtd_acessos += 1 categoria.save() if search: qs = categoria.produtos.filter(descricao__icontains=search) else: qs = categoria.produtos.all() serializer = ProdutoSerializer(qs, many=True) return list_response(self, ProdutoSerializer, qs, request)
def list(self, request, *args, **kwargs): inicio = request.query_params.get('inicio', None) fim = request.query_params.get('fim', None) qs = self.get_queryset() if inicio is not None and fim is not None: qs = qs.filter(created_at__range=(inicio, fim)) elif inicio is not None: qs = qs.filter(created_at__gte=inicio) elif fim is not None: qs = qs.filter(created_at__lte=fim) return list_response(self, self.get_serializer, qs, request)
def produtos(self, request, pk): """ Obter produtos recomendados para um usuário. """ try: if not recommender_produtos.is_fitted: recommender_produtos.fit() produtosId = recommender_produtos.get_topk(int(pk)) produtos = Produto.objects.filter(id__in=produtosId) return list_response(self, ProdutoSerializer, produtos, request) except models.ObjectDoesNotExist: raise Http404
def avaliacoes(self, request, pk): cliente = self.get_object() return list_response(self, AvaliacaoProdutoSerializer, cliente.avaliacoes_produto.all(), request)
def acessos(self, request, *args, **kwargs): n = int(request.query_params.get('quantidade', 20)) qs = self.queryset.order_by('-qtd_acessos')[:n] return list_response(self, self.get_serializer, qs, request)