Django Rest Framework 电商项目 5-11 DRF的搜索和排序

ぐ巨炮叔叔 提交于 2019-11-26 22:37:56

继续进行配置,看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中配置,但我们采用了更高级的方法)。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!