Django Как сделать чтобы пагинация и фильтрация не конфликтовали?
Я сделал фильтрацию в Django с помощью GET-запросов. К примеру, при поиске объявлений по категории и региону, ссылка будет выглядеть так "https://ru.stackoverflow.com/?category=cars®ion=moscow". Но если я захочу пагинировать результаты, тогда "?page" заменит абсолютно весь путь ("https://ru.stackoverflow.com/?page=2") и выдаст вообще все объявления. Что в таком случае стоит делать? Вот код фильтрации
def get_queryset(self):
queryset = announcement.objects.filter(status=True)
if self.request.GET.get("isRequest") is not None \
and self.request.GET.get("category") is not None \
and self.request.GET.get("region") is not None:
queryset = announcement.objects.filter(Q(category__url=self.request.GET.get("category")),
Q(region__url=self.request.GET.get("region")),
Q(isRequest=self.request.GET.get("isRequest")))
elif self.request.GET.get("category") is not None \
and self.request.GET.get("region") is not None:
queryset = announcement.objects.filter(Q(category__url=self.request.GET.get("category")),
Q(region__url=self.request.GET.get("region")))
elif self.request.GET.get("region") is not None \
and self.request.GET.get("isRequest") is not None:
queryset = announcement.objects.filter(Q(isRequest=self.request.GET.get("isRequest")),
Q(region__url=self.request.GET.get("region")))
elif self.request.GET.get("category") is not None \
and self.request.GET.get("isRequest") is not None:
queryset = announcement.objects.filter(Q(isRequest=self.request.GET.get("isRequest")),
Q(category__url=self.request.GET.get("category")))
elif self.request.GET.get("region") is not None:
queryset = announcement.objects.filter(Q(region__url=self.request.GET.get("region")))
elif self.request.GET.get("category") is not None:
queryset = announcement.objects.filter(Q(category__url=self.request.GET.get("category")))
elif self.request.GET.get("isRequest") is not None:
queryset = announcement.objects.filter(Q(isRequest=self.request.GET.get("isRequest")))
else:
queryset = announcement.objects.all()
if self.request.GET.get("search") is not None:
queryset = queryset.filter(Q(title__icontains=self.request.GET.get("search")) |
Q(description__icontains=self.request.GET.get("search")))
return queryset