Размещение условий if else в представлении API Django Rest Framework во время поиска

Я пишу API с DRF, и мне нужно изменить набор запросов, если поиск не дает результатов.

from rest_framework.generics import ListAPIView
from rest_framework import filters
from .models import Item
from .serializer import ItemSerializer
from .pagination import ItemPagination

class SearchItemApi(ListAPIView):
    serializer_class = ItemSerializer
    filter_backends = [filters.SearchFilter]
    search_fields =  ['name',]
    pagination_class = ItemPagination
    
    def get_queryset(self): 
        return Item.objects.all()

Здесь представлен сериализатор:

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = ('id', 'name',)

И этот APIView покажет такие результаты на странице:

{
    "count": 2,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": 1,
            "name": "Blue Jeans",
        },
        {
            "id": 2,
            "name": "Red Jeans",
        }
    ]
}

И я хочу сделать что-то вроде этого:

def get_queryset(self):
    if api_data["count"] == 0:
         return Item.objects.filter(*some filter*)
    else:
         return Item.objects.all()

Как добавить условие, чтобы вернуть другой набор запросов, если поиск принесет нулевые результаты?

Вам необходимо проверить результат кверисета

def get_queryset(self):
    qs = super().get_queryset()
    if qs.count() == 0:
         return Item.objects.filter(*some filter*)
    else:
         return Item.objects.all()
Вернуться на верх