Фильтр/поиск 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, но даже тогда фильтр/поиск должен работать):
Я ожидаю, что фильтр/поиск будет работать хотя бы на минимальном уровне. Что мне делать, чтобы исправить ситуацию?
Причина ошибки:
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
и все работает нормально.