Django 休息框架多搜索

Django rest framework multi searching

大家。我试着理解搜索。 我有 url 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 我得到了一个具有准确标题和描述的实例。

(method3)但我想获取标题包含一个值且描述包含其他值的所有实例的列表。例如,我想写 /api/v1/quiz/all/?title=Q&description=d 并获取标题包含 Q 且描述包含 d.

的列表

谢谢。

您需要创建自定义 FilterSet class 并使用 containsicontains(如果您不区分大小写),因为默认使用 exact 这就是为什么你得不到你想要的结果的原因。请参阅文档 here and here

# 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