Django rest framework Django rest框架多搜索

Django 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包含其他值。例如,

各位。我试着理解搜索。 我有url
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