Список строк в качестве параметра в url в django
Я работаю в представлении поиска, которое принимает два входа в качестве фильтра :
- поиск слова
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
я решил это, используя метод сериализатора, наследуя от 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)