字符串列表作为django中url中的一个参数



我在一个搜索视图中工作,该视图将两个输入作为过滤器:

  1. 搜索词

2.城市(多选(

我使用序列化程序完成了它,它起作用了,但分页不起作用,因为它是一个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/它返回未找到:/company/search/那么如何传递参数,或者有其他方法可以使用后方法进行分页

我建议在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/

我使用序列化程序方法解决了这个问题,从视图集继承。具有分页方法的GenericViewset

class SearchView(viewsets.GenericViewSet):
permission_classes = [IsDriver]
queryset = CompanyProfile.objects.all()
serializer_class = SearchSerializer
@action(methods=['post'], 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)

相关内容

  • 没有找到相关文章

最新更新