Размещение условий 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()