Django Rest Framework不输出过滤的查询集

时间:2018-10-16 01:38:51

标签: django django-rest-framework

我正在使用DRF ViewSet搜索名称,但仅搜索部分文本。问题是我使用get_queryset使用icontains从DB过滤数据:

class CustomerViewSet(viewsets.ModelViewSet):
    serializer_class = serializers.CustomerSerializer
    permission_classes = [IsAuthenticated]
    lookup_field = 'full_name'

    def get_queryset(self):

        if self.kwargs:
            return models.Customer.objects.filter(full_name__icontains=self.kwargs['full_name'])
        else:
            return models.Customer.objects.all()

该视图向我发送了404 error,但是当我在终端中打印该视图时,它会显示现有数据。

2 个答案:

答案 0 :(得分:0)

在您的情况下,您应将网址格式设计为:

/customers/?full_name=foo    #list
/customers/{full_name}/      #retrieve instance

简单答案: 只需尝试使用查询参数查询您的客户列表

?full_name=xxx

答案 1 :(得分:0)

api/views.py

from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
from rest_framework.filters import SearchFilter

class SearchViewSet(viewsets.ModelViewSet):
    queryset = models.Customer.objects.all()
    serializer_class = serializers.CustomerSerializer
    permission_classes = [IsAuthenticated]
    filter_backends = [SearchFilter]
    search_fields = ['full_name']

URL

  • /api/customers/<pk>,其中pk是Customer的唯一ID
  • /api/customers/?search=<full_name>,其中full_name是搜索查询

因此,我可以从id检索数据并按其名称搜索客户。但是,如果我们想在诸如search_fields之类的其他字段中查找信息,可以将字段添加到search_fields = ['full_name', 'address']中。 /api/customers/?search=some address也会在address字段中搜索。