又到开学季,小编我希望大家在新的学年继续努力,学有所成。Django-filter是小编我最喜欢的几个Django第三方安装包之一,在日常开发项目中经常用到,尤其当碰到用户需要对搜索结果中做进一步筛选的场景时。Django-filter允许用户根据自定义字段过滤从数据库查询得到的queryset,进一步筛选出用户想要的查询结果。这样做避免了对数据库的再次查询,大大提升了效率。小编我就今天带你看看如何安装和使用django-filter,并重点讲解如何美化django-filter并给其添加分页功能。该文值得收藏指数99,建议先加入微信收藏再阅读,以备后用。
实战内容
我们将开发一个文章搜索页面,用户可以根据标题关键词搜索文章得到文章列表。如果用户对显示搜索结果不满意,可以进一步根据文章的发表日期和文章类别对搜索结果进行进一步筛选。筛选结果以表格和分页显示。我们将借助django-filter实现。
本项目模型很简单(models.py内容如下所示),包含Article和Category两个模型,其中Article与Category是单对多的关系。模型还是基于之前大江狗实战案例Django实战专题: 开发专业博客(1)之内容管理后台开发。
#models.py
class Article(models.Model):
"""文章模型"""
STATUS_CHOICES = (
('d', '草稿'),
('p', '发表'),
)
title = models.CharField('标题', max_length=200, db_index=True)
slug = models.SlugField('slug', max_length=60, blank=True)
body = models.TextField('正文')
pub_date = models.DateTimeField('发布时间', null=True)
status = models.CharField('文章状态', max_length=1, choices=STATUS_CHOICES, default='p')
category = models.ForeignKey('Category', verbose_name='分类',
on_delete=models.CASCADE, blank=False, null=False)
def __str__(self):
return self.title
class Category(models.Model):
"""文章分类"""
name = models.CharField('分类名', max_length=30, unique=True)
def __str__(self):
return self.name
django-filter的安装
首先使用如下pip命令安装django-filter。
$ pip install django-filter
然后将 'django_filters'
加入INSTALLED_APPS
.
INSTALLED_APPS = [
...
'django_filters'