继续进行配置,看DRF的文档。搜索功能使用SearchFilter来完成,这是做模糊查询最佳的Filter。
在views.py中,首先引入:
from rest_framework import filters
在filter_backends中增加一个filters.SearchFilter参数:
filter_backends = (DjangoFilterBackend, filters.SearchFilter)
再配置搜索字段:
search_fields = ('name', 'goods_brief', 'goods_desc')
其实字段的配置是很灵活的,继续看文档,他告诉了我们一些正则表达式的写法:
- '^' Starts-with search.
- '=' Exact matches.
- '@' Full-text search. (Currently only supported Django's MySQL backend.)
- '$' Regex search.
我们可以来简单的使用一个,在search_fields 的参数中的‘name’前加一个^,搜索以name的值开头的数据。再改成=,试用一下。要注意的是,对每个字段都要做处理,这样才能完成对不同字段的不同级别的搜索。最后请取消添加的东西,回到最初。启动项目,查看效果。
然后是排序,看官方文档的OrderingFilter。
同样是在filter_backends中增加一个参数,叫filters.OrderingFilter,即filter_backends改为:
filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter,)
依然是配置一个fields,叫ordering_fields:
ordering_fields = ('sold_num', 'add_time')
启动项目,查看效果。
最后读者请看一下三种filter的配置,做一个总结(关于字段的过滤可以用filter_field在View中配置,但我们采用了更高级的方法)。