python - 如何在 APIView 而不是 ListAPIView 中使用 django 过滤器进行过滤和搜索?
问题描述
下面给出的是用 ListAPIview 编写的代码,现在我必须将其更改为 APIView。我怎样才能在其中进行搜索、过滤和排序?如果需要更多详细信息,请在评论中告诉我。提前致谢。
class DiscussionView(APIView):
pagination_class = DiscussionPagination
filter_backends = [OrderingFilter, SearchFilter]
search_fields = ['title']
ordering_fields = ['id']
def get(self, request, format=None):
query = Discussion.objects.all()
serializer = DiscussionSerializer(query, many=True)
return Response(serializer.data)
def post(self, request, format=None):
serializer = DiscussionSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
解决方案
filter
您可以分别使用和添加自定义过滤和排序order_by
。
def get(self, request, format=None):
query = Discussion.objects.all().order_by('id')
title = request.query_params.get('title')
if title is not None:
query = query.filter(title=title)
serializer = DiscussionSerializer(query, many=True)
return Response(serializer.data)
参考:https ://www.django-rest-framework.org/api-guide/filtering/#filtering-against-query-parameters
推荐阅读
- python-3.x - 尝试添加到二维列表,得到 IndexError: tuple index out of range
- highcharts - 如何在条形类型的 consolvetvs highcharts 中按月显示当年的总费用?
- python-3.x - (win10) Python 3.6 - 错误 Pyshark capture.sniff()
- javascript - 各种 globalCompositeOperation 模式的 WebGL 等效项是什么?
- javascript - 单击按钮时难以更改谷歌地图的样式
- go - 从插件中删除主机的源代码以减小文件大小
- c# - EnumWindows 找不到触摸键盘
- r - R 的 assign() 函数何时合适?
- javafx - TornadoFX 中 FXML 文件的前缀路径
- java - Inheriting specifid methods in java