我正在使用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
,但是当我在终端中打印该视图时,它会显示现有数据。
答案 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']
/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
字段中搜索。