Open utterances-bot opened 3 years ago
我设置了搜索,不论是完整匹配还是模糊匹配都不起作用,还是会把整个列表查出来,请问这是为什么呢
感谢博主提供的教程~
django-filter
也可以实现模糊搜索功能,需要自定义过滤器类来实现。
class ArticleTitleFilter(filters.FilterSet):
"""
自定义文章标题过滤器类,实现对文章标题进行模糊搜索(不区分大小写)
"""
title = filters.CharFilter(field_name='title', lookup_expr='icontains', label='文章标题(模糊搜索且不区分大小写)')
class Meta:
model = Article
fields = ['title']
# Create your views here.
class ArticlesViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all().order_by('-create_time')
permission_classes = [IsAdminOrReadOnly]
# 使用自定义文章标题过滤器类类
filterset_class = ArticleTitleFilter
补一下导入的包的代码-。-
from django_filters import rest_framework as filters
前者是精确,后者是模糊,大家要注意啦,还有就是INSTALLED_APPS = [ ... 'rest_framework', 'django_filters', ... ]
我是这样导包才可行from rest_framework.filters import SearchFilter
得添加INSTALL_APP,否则搜索时会提示TemplateDoesNotExist错误
我设置了搜索,不论是完整匹配还是模糊匹配都不起作用,还是会把整个列表查出来,请问这是为什么呢
模糊搜索时要注意命令行写的语句格式是跟精准搜索时不一样的,使用模糊搜索时页面上会显示一个过滤器,你在过滤器上填上文章的题目再看俺url的语句,它显示应该为http://127.0.0.1:8000/api/article/?search=post
想问一下,我使用rest_framework.filters的SearchFilter为啥怎么搜都会把整个列表返回来呢?
完全匹配的就可以,很怪,不知道什么情况了
哦哦懂了,模糊匹配的url参数就只有一个"search"了,填入的值会在指定的属性中模糊匹配
回复
late-nightpoet commented on 2022年4月18日
感谢。在postman上,参数的key要设置为search
。
在浏览器上,在“过滤器”那块直接填上模糊搜索的内容就可以了,然后浏览器会自动补上?search=XXX
Django-Vue搭建个人博客:过滤文章 - 杜赛的博客
https://www.dusaiphoto.com/article/112/