【django开发手册】详解drf filter中DjangoFilterBackend,SearchFilter,OrderingFilter使用方式
在Django REST framework中,DjangoFilterBackend
是一个过滤器后端,它允许你使用DjangoFilter包进行过滤。SearchFilter
用于提供搜索功能,允许你通过指定查询参数来搜索资源。OrderingFilter
允许客户端通过指定查询参数来对返回的结果进行排序。
以下是如何在Django REST framework视图中使用这些过滤器的示例代码:
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import SearchFilter, OrderingFilter
from rest_framework.generics import ListAPIView
from .models import MyModel
from .serializers import MyModelSerializer
class MyModelListView(ListAPIView):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_fields = ['field1', 'field2'] # 使用DjangoFilterBackend时指定过滤字段
search_fields = ['field1', 'field2'] # 使用SearchFilter时指定搜索字段
ordering_fields = ['field1', 'field2'] # 使用OrderingFilter时指定排序字段
在上面的代码中,MyModelListView
是一个视图类,它继承自 ListAPIView
。我们设置了 filter_backends
属性来指定使用的过滤器后端。对于 DjangoFilterBackend
,我们通过 filterset_fields
指定了可以过滤的字段。对于 SearchFilter
,我们通过 search_fields
指定了可以搜索的字段。对于 OrderingFilter
,我们通过 ordering_fields
指定了可以排序的字段。
要使用这些过滤器,你可以通过添加相应的查询参数到你的请求中。例如:
- 过滤:
?field1=value1&field2=value2
- 搜索:
?search=search_term
- 排序:
?ordering=field1
确保你已经安装了 django-filter
包,如果没有安装,你可以通过pip安装它:
pip install django-filter
在Django的 settings.py
文件中添加 django_filters
到 INSTALLED_APPS
中,以便可以使用其widgets和filters。
INSTALLED_APPS = [
# ...
'django_filters',
# ...
]
评论已关闭