2
As mentioned in my comment you can apply filters to a query without it being evaluated.
This allows you to create a query based on condition like
class SearchAuctions(APIView):
permission_classes = [AllowAny]
def get(self, request, format=None):
"""
Return auctions after filtering.
"""
items = AuctionItem.objects
if 'textToSearch' in request.data.keys():
textToSearch = request.data['textToSearch']
items = items.annotate(
search=SearchVector('name', 'description'),
).filter(search=textToSearch)
if 'locationToSearch' in request.data.keys():
locationToSearch = request.data['locationToSearch']
items = items.filter(location=locationToSearch)
itemSerializer = AuctionItemSerializer(items, many=True)
return Response(itemSerializer.data)
Source:stackexchange.com