django-rest-framework - Django rest框架多搜索
问题描述
每个人。我试着理解搜索。我有网址 path('quiz/all/', QuizListView.as_view()),
查看:
class QuizListView(generics.ListAPIView):
queryset = Quiz.objects.all()
serializer_class = QuizDetailSerializer
search_fields = ('description', 'title',)
filterset_fields = ['title', 'description',]
(方法1)如果我使用搜索,例如,/api/v1/quiz/all/?search=Q
我得到所有标题或描述包含“Q”的实例(方法2)我可以搜索/api/v1/quiz/all/?title=Q&description=d
我得到一个具有确切标题和描述的实例。
(方法3)但我想获取所有实例的列表,其中标题包含一个值,描述包含另一个值。例如,我想编写/api/v1/quiz/all/?title=Q&description=d
并获取标题包含 Q 和描述包含 d 的列表。
Quiz1(title=Q, description=d)
Quiz2(title=Test, description=dd)
Quiz3(title=NewQ, description=Test_d)对于 (method1,/api/v1/quiz/all/?search=Q) 我得到了 Quiz1, Quiz2, Quiz3
对于 (method2,/api/v1/quiz/all/?title=Q&description=d) 我得到了 Quiz1
对于 (method3,/api/v1/quiz/all/?title=Q&description=d) 我想得到 Quiz1 和 Quiz3 (因为它们包含
Q
标题和d
描述)
谢谢。
解决方案
您需要创建一个自定义FilterSet
类并使用contains
or icontains
(如果您希望不区分大小写),因为默认使用的是 using exact
,这就是您无法获得所需结果的原因。在此处和此处查看文档
# filters.py
class QuizFilter(django_filters.FilterSet):
class Meta:
model = Quiz
fields = {
'title': ['contains'], # or icontains
'description': ['contains'], # or icontains
}
# views.py
from django_filters.rest_framework import DjangoFilterBackend
from .filters import QuizFilter
class QuizListView(generics.ListAPIView):
queryset = Quiz.objects.all()
serializer_class = QuizDetailSerializer
filter_backends = (DjangoFilterBackend, ) # add here other filters backends
filterset_class = QuizFilter
推荐阅读
- javascript - 深度合并两个json对象es6
- google-bigquery - BigQuery 在 2019 年 10 月 29 日中断?
- python - 如何在多个命名输入估计器模型上使用 Tensorflow Serving RESTful API?
- r - 理解 [.... with=F][[1]] 的含义
- html - 如何在视图按钮上添加模式弹出窗口?
- swift - ARkit函数setWorldOrigin旋转和飘走的问题
- c - 有没有更简单的方法来编译这个项目
- javascript - 使用 systemjs 编译的 TypeScript 未登录到控制台
- ios - 当我的表格视图中没有要显示的数据时,如何显示返回消息?
- java - 如何在达到最大尝试次数时停止以及如果答案错误留在同一个问题中