Фильтр/поиск DRF возвращает все?

В настоящее время я делаю самостоятельный проект приложения для инвентаризации и пытаюсь реализовать фильтр и поиск.

что я сделал

#views.py

from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters    

class ListInventories(generics.ListAPIView):

    serializer_class = Inventory
    filter_backends = [filters.SearchFilter]
    search_fields = ['name']
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['name', 'stock']

    def get(self, request):

        inventories = Inventory.objects.all()
        serializer = InventorySerializers(inventories, many=True)
        return Response({'inventories': serializer.data})


class InventoryDetails(APIView):
    def get(self, request, pk):
        inventories = Inventory.objects.get(id=pk)
        serializer = InventorySerializers(inventories)
        return Response({'inventory': serializer.data})

в settings.py

INSTALLED_APPS = [
    ...
    'django_filters',
    ...
]
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}

в url:

http://127.0.0.1:8000/api/inventory?name=para

Я пробовал ?search=para и ?search=anynonsense . и DRF всегда возвращал все.

для пояснения вот скриншот (всего элементов пока только 3, но даже тогда фильтр/поиск должен работать):

DRF

Я ожидаю, что фильтр/поиск будет работать хотя бы на минимальном уровне. Что мне делать, чтобы исправить ситуацию?

Причина ошибки:

class ListInventories(generics.ListAPIView):

    serializer_class = Inventory
    
    # You are settings search filter here
    * filter_backends = [filters.SearchFilter]

    search_fields = ['name']
    
    # and overriding it here, that's why search is not working
    * filter_backends = [DjangoFilterBackend]

    filterset_fields = ['name', 'stock']

должно быть filter_backends = [DjangoFilterBackend, filters.SearchFilter]

Через некоторое время я решил проблему.

Именно метод get продолжает возвращать все. Я закомментировал метод get и все работает нормально.

Вернуться на верх