Django Rest Framework не выводит отфильтрованные наборы запросов - PullRequest
0 голосов
/ 16 октября 2018

Я использую DRF ViewSet для поиска имени, но только частичного текста.Проблема в том, что я использую get_queryset для фильтрации данных из БД с помощью icontains:

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, но когда я печатаю его в терминале, оно показывает существующие данные.

1 Ответ

0 голосов
/ 20 октября 2018

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
  • /api/customers/?search=<full_name>, где full_name это поисковый запрос

Итак, я могу получить данные из id и искать клиента по его имени.Но мы можем добавить поля к search_fields, если мы хотим искать информацию в других полях, например search_fields = ['full_name', 'address']./api/customers/?search=some address будет искать и в поле address.

...