Django Rest Framework Filtering не отвечает 'No Data Found', когда данные не найдены

У меня есть очень простой DRF ListApiView, который использует filters.SearchFilter как filter_backend.

Но проблема в том, что он возвращает пустой список, если в наборе запросов не найдено никаких данных.

Мой код:

serializers.py

class PhoneSerializer(serializers.ModelSerializer):
    brand_name = serializers.CharField(source='brand')

    class Meta:
        model = models.Phone
        fields = '__all__'

views.py

class PhoneApiView(generics.ListAPIView):
    filter_backends = [filters.SearchFilter]
    serializer_class = serializers.PhoneSerializer
    queryset = models.Phone.objects.all()
    search_fields = ['model_name', 'jan_code']

Результат успешного поиска

[
    {
        "id": 6,
        "brand_name": "Oppo",
        "model_name": "Oppo Reno 5",
        "image": "http://127.0.0.1:8000/media/phone/reno-5-black-2.jpg",
        "colors": "Red, Blue",
        "jan_code": "785621716768184",
        "brand": 6
    }
]

Ожидаемый результат, если ничего не найдено (В настоящее время возвращает пустой список [])

    {
        "response": 'No Data Found'
    }

Теперь, Как мне это сделать? Спасибо

Попробуйте начать с метода filter_queryset() и проделайте путь к методу get().

    def filter_queryset(self, queryset):
        for backend in list(self.filter_backends):
            queryset = backend().filter_queryset(self.request, queryset, self)
        return queryset

    def get_queryset(self):
        return Phone.objects.all()

    def get(self, request):
        filtered_qs = self.filter_queryset(self.get_queryset())

        
        serializer = PhoneSerializer(filtered_qs)
        serializer.is_valid(raise_exception=True)
        if not filtered_qs.exists():
            return Response({'response': 'No Data Found'})
        return Response(serializer.data)
Вернуться на верх