Список строк в качестве параметра в url в django

Я работаю в представлении поиска, которое принимает два входа в качестве фильтра :

  1. поиск слова

2.города (мультивыбор)

я сделал это с помощью сериализатора и это сработало, но paggination не работает, потому что это был post метод, поэтому я пытаюсь взять эти входные данные из url параметров, я пробовал этот шаблон :

    path(r"search/<str:search>/(?P<city>\w*)/",
            SearchView.as_view({"get": "search"}), name="search"),

но когда я просматриваю: http://127.0.0.1:8000/company/search/taxi/montrial/ он возвращает Not Found: /company/search/ как передать параметры или есть другой способ использовать paggination с методом post

Я предлагаю использовать пагинацию с get запросом или в случае, если вы должны сделать это с post

class CustomPagination(pagination.PageNumberPagination):
def get_paginated_response(self, data):
    return Response({
        'links': {
            'next': self.get_next_link(), #you can read page number from url and put it here
            'previous': self.get_previous_link()
        },
        'count': self.page.paginator.count,
        'results': data
    }) 

для чтения данных из url вы можете использовать request.query_params

https://www.django-rest-framework.org/api-guide/pagination/

я решил это, используя метод сериализатора, наследуя от viewsets.GenericViewsets, который имеет методы пагинации

class SearchView(viewsets.GenericViewSet):
    permission_classes = [IsDriver]
    queryset = CompanyProfile.objects.all()
    serializer_class = SearchSerializer

    @action(methods=['get'], detail=False)
    def search(self, request, format=None):
        serializer = SearchSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        page = self.paginate_queryset(serializer.data["companies"])
        if page is not None:
            # used CompanyProfileSerializer to serialize the companies query
            serializer = CompanyProfileSerializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        return Response(serializer.data)
Вернуться на верх