1. 安装
pip install django-filter
2. 注册
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework_simplejwt',
# 过滤器
'django_filters',
'corsheaders',
'rest_framework',
'users',
'goods',
'cart',
'order'
]
3.配置
REST_FRAMEWORK = {
"UNAUTHENTICATED_USER": None,
# 配置登录鉴权方式
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
# 配置DRF使用的过滤器
'DEFAULT_FILTER_BACKENDS': [
'django_filters.rest_framework.DjangoFilterBackend',
# 排序用的过滤器
'rest_framework.filters.OrderingFilter'
]
}
4.使用
class GoodsView(ReadOnlyModelViewSet):
""" 获取商品列表,获取单个商品信息 """
# 商品只有上架的才能进行展示
queryset = Goods.objects.filter(is_on=True)
serializer_class = GoodsSerializers
# 实现通过商品分类、是否推荐进行过滤
filterset_fields = ('group', 'recommend')
# 实现通过价格和销量、时间排序
ordering_fields = ('sales', 'price', 'create_time')
5.postman验证,加上负号就是倒序
![](https://i-blog.csdnimg.cn/blog_migrate/02c9b9d26a08e860745fbe10e8b7acd4.png)
6.也可以通过重写list方法进行过滤,这样就用不到上的配置了
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
# 在这里手动添加过滤,就不需要上面的那个了
queryset = queryset.filter(user=request.user)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)