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)