在DRF框架的使用中,一个比较让人头疼的问题是,怎么满足前端那变态的数据过滤需求,特别当前端提供所谓的灵活查询,过滤条件更是五花八门,比如一般前端查询都简单判等查询:
path('book/<int:id>',views.BooksView.as_view(),name='book')
它对应的请求:
http://127.0.0.1:9000/book/1/
怎么查询书名中包含“英”字,日期大于“2019-3-14”等等诸如此类的请求。Django-filter这个组件就是要解决这样的问题。
1. 安装配置
Django-filter支持的Python版本和Django版本、DRF版本如下:
- Python: 3.5, 3.6, 3.7, 3.8
- Django: 1.11, 2.0, 2.1, 2.2, 3.0
- DRF: 3.10+
在虚拟开发环境中安装:
pip install django-filter
在Django的项目配置文件中安装并配置django_filters应用:
INSTALLED_APPS = [
...
'django_filters',
]
REST_FRAMEWORK = {
# 过滤器默认后端
'DEFAULT_FILTER_BACKENDS': (
'django_filters.rest_framework.DjangoFilterBackend',),
}
2.使用流程
我们通过一个简单的图书查询来说明如果在DRF中使用Django-filter过滤器。图书模型如下:
# models.py
class Bookinfo(models.Model):
btitle = models.CharField(max_length=200,verbose_name='标题')
bpub_date = models.DateField(blank=True, null=True,verbose_name='出版日期')
bread = models.IntegerField(null=True,verbose_name='阅读数量')
bcomment = models.IntegerField(null=True,verbose_name='评论数量')
bimage = models.CharField(max_length&