Поиск, а затем фильтрация с помощью django rest framework - PullRequest
0 голосов
/ 21 января 2020

У меня есть представление, в котором перечислены элементы, соответствующие запросу:

def new_search(request):
    search = request.POST.get('search')
    models.Search.objects.create(search=search)
    products = models.Product.objects.filter(name__icontains=search)


    context = {
        'search': search,
        'products': products,
    }
    return render(request, 'my_app/new_search.html', context)

, затем в списке элементов после поиска я хочу применить некоторые фильтры. Таким образом, я создал другое представление:

class ProductListing(ListAPIView):

    # set the pagination and serializer class

    pagination_class = StandardResultsSetPagination
    serializer_class = ProductSerializers

    def get_queryset(self):
        # filter the queryset based on the filters applied
        search = self.request.query_params.get('search', None)

        queryList = Product.objects.filter(name__icontains=search)


         if country:
             queryList = queryList.filter(country=country)
         if variety:
             queryList = queryList.filter(variety=variety)
         if province:
             queryList = queryList.filter(province=province)
         if region:
             queryList = queryList.filter(region=region)

             # sort it if applied on based on price/points

        if sort_by == "price":
            queryList = queryList.order_by("price")

        return queryList

проблема в том, что self.request.query_params.get('search', None) не возвращает ни один метод сообщения с search не предоставляется.

Что лучше всего делать в таких ситуациях? Я понял, что для поддержки API без сохранения состояния я не могу сохранить поиск где-то, а затем повторно использовать его для фильтра, но мне нужно снова отправить POST поиск в фильтр (ProductListing). Как я могу это сделать?

...