Django rest framework Django rest框架多搜索
各位。我试着理解搜索。 我有urlDjango rest framework Django rest框架多搜索,django-rest-framework,django-filter,Django Rest Framework,Django Filter,各位。我试着理解搜索。 我有urlpath('quick/all/',QuizListView.as_view()), 视图: (方法1)如果我使用搜索,例如/api/v1/quick/all/?search=Q我得到了标题或描述包含“Q”的所有实例 (方法2)我可以搜索/api/v1/quick/all/?title=Q&description=d我得到了一个具有确切标题和描述的实例 (method3)但我想得到所有实例的列表,其中title包含一个值,description包含其他值。例如,
path('quick/all/',QuizListView.as_view()),
视图:
(方法1)如果我使用搜索,例如/api/v1/quick/all/?search=Q
我得到了标题或描述包含“Q”的所有实例
(方法2)我可以搜索/api/v1/quick/all/?title=Q&description=d
我得到了一个具有确切标题和描述的实例
(method3)但我想得到所有实例的列表,其中title包含一个值,description包含其他值。例如,我想编写/api/v1/quick/all/?title=Q&description=d
,并获取其中title包含Q,description包含d的列表
- Quiz1(标题=Q,描述=d)
Quiz2(标题=测试,描述=dd)
Quiz3(标题=NewQ,描述=Test_d) - 对于(method1,/api/v1/quick/all/?search=Q),我得到了Quiz1,Quiz2,Quiz3
- 对于(方法2,/api/v1/quick/all/?title=Q&description=d),我得到了Quiz1
- 对于(方法3,/api/v1/quick/all/?title=Q&description=d),我想
获取Quiz1和Quiz3(因为它们包含标题的
,描述的Q
)d
谢谢。您需要创建一个自定义的
过滤器集
类,并使用包含
或icontains
(如果您不区分大小写),因为默认值是使用精确
,这就是您无法返回所需结果的原因。见文件和
超级的!谢谢!
class QuizListView(generics.ListAPIView):
queryset = Quiz.objects.all()
serializer_class = QuizDetailSerializer
search_fields = ('description', 'title',)
filterset_fields = ['title', 'description',]
# 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